diff --git a/app/imports/api/schema.js b/app/imports/api/schema.js index ea94ffcc..4ec13855 100644 --- a/app/imports/api/schema.js +++ b/app/imports/api/schema.js @@ -15,4 +15,4 @@ function getDefaultSchema(){ export default function schema(options){ return getDefaultSchema().extend(options); -} +}; diff --git a/app/imports/api/users/Users.js b/app/imports/api/users/Users.js index be3fdb0e..dd4cd049 100644 --- a/app/imports/api/users/Users.js +++ b/app/imports/api/users/Users.js @@ -1,19 +1,11 @@ -Schemas.UserProfile = schema({ - username: { - type: String, - optional: true, - }, -}); +import SimpleSchema from 'simpl-schema'; +import schema from '/imports/api/schema.js'; -Schemas.User = schema({ +const userSchema = schema({ username: { type: String, optional: true, }, - profile: { - type: Schemas.UserProfile, - optional: true, - }, emails: { type: Array, optional: true, @@ -44,11 +36,6 @@ Schemas.User = schema({ optional: true, blackbox: true, }, - roles: { - type: Object, - optional: true, - blackbox: true, - }, roles: { type: Array, optional: true, @@ -66,11 +53,15 @@ Schemas.User = schema({ index: 1, optional: true, }, + darkMode: { + type: Boolean, + optional: true, + }, }); -Meteor.users.attachSchema(Schemas.User); +Meteor.users.attachSchema(userSchema); -Meteor.users.gnerateApiKey = new ValidatedMethod({ +Meteor.users.generateApiKey = new ValidatedMethod({ name: "Users.methods.generateApiKey", validate: null, run(){ @@ -83,6 +74,17 @@ Meteor.users.gnerateApiKey = new ValidatedMethod({ }, }); +Meteor.users.setDarkMode = new ValidatedMethod({ + name: "Users.methods.setDarkMode", + validate: new SimpleSchema({ + darkMode: { type: Boolean }, + }).validator(), + run({darkMode}){ + if (!this.userId) return; + Meteor.users.update(this.userId, {$set: {darkMode}}); + }, +}); + Meteor.users.sendVerificationEmail = new ValidatedMethod({ name: "Users.methods.sendVerificationEmail", validate: schema({ diff --git a/app/imports/server/publications/index.js b/app/imports/server/publications/index.js index 4271f09f..e5e5d827 100644 --- a/app/imports/server/publications/index.js +++ b/app/imports/server/publications/index.js @@ -1,6 +1,5 @@ import './characterList.js'; import './library.js'; import './singleCharacter.js'; -import './user.js'; import './users.js'; import './icons.js'; diff --git a/app/imports/server/publications/user.js b/app/imports/server/publications/user.js deleted file mode 100644 index ceb648ff..00000000 --- a/app/imports/server/publications/user.js +++ /dev/null @@ -1,8 +0,0 @@ -Meteor.publish("user", function(){ - return Meteor.users.find(this.userId, {fields: { - roles: 1, - username: 1, - profile: 1, - apiKey: 1, - }}); -}); diff --git a/app/imports/server/publications/users.js b/app/imports/server/publications/users.js index df759364..603483f0 100644 --- a/app/imports/server/publications/users.js +++ b/app/imports/server/publications/users.js @@ -1,3 +1,14 @@ +import '/imports/api/users/Users.js'; + +Meteor.publish("user", function(){ + return Meteor.users.find(this.userId, {fields: { + roles: 1, + username: 1, + apiKey: 1, + darkMode: 1, + }}); +}); + Meteor.publish("userNames", function(ids){ if (!this.userId || !ids) return []; return Meteor.users.find( diff --git a/app/imports/ui/StoryBook.vue b/app/imports/ui/StoryBook.vue index 3a09b332..eb5d1896 100644 --- a/app/imports/ui/StoryBook.vue +++ b/app/imports/ui/StoryBook.vue @@ -12,6 +12,7 @@ Components + diff --git a/app/imports/ui/character/CharacterSheet.vue b/app/imports/ui/character/CharacterSheet.vue index 08f41cc4..d8b48e46 100644 --- a/app/imports/ui/character/CharacterSheet.vue +++ b/app/imports/ui/character/CharacterSheet.vue @@ -41,7 +41,7 @@ import Creatures from '/imports/api/creature/Creatures.js'; import isDarkColor from '/imports/ui/utility/isDarkColor.js'; import { mapMutations } from "vuex"; - import theme from '/imports/ui/theme.js'; + import { theme } from '/imports/ui/theme.js'; import StatsTab from '/imports/ui/character/StatsTab.vue'; import CharacterTreeView from '/imports/ui/character/CharacterTreeView.vue'; import { recomputeCreature } from '/imports/api/creature/creatureComputation.js' diff --git a/app/imports/ui/components/AttributeEdit.vue b/app/imports/ui/components/AttributeEdit.vue index 0d6099d0..fd28b4e2 100644 --- a/app/imports/ui/components/AttributeEdit.vue +++ b/app/imports/ui/components/AttributeEdit.vue @@ -26,7 +26,6 @@ /> - + - + @@ -9,8 +9,10 @@ diff --git a/app/imports/ui/theme.js b/app/imports/ui/theme.js index 1a8234a9..f592b925 100644 --- a/app/imports/ui/theme.js +++ b/app/imports/ui/theme.js @@ -1,11 +1,21 @@ const theme = { primary: "#B71C1C", secondary: "#424242", - accent: "#B71C1C", - error: "#f44336", + accent: "#f44336", + error: "#FF6D00", warning: "#FFB300", info: "#5C6BC0", success: "#43A047", }; -export default theme; +const darkTheme = { + primary: "#f44336", + secondary: "#424242", + accent: "#B71C1C", + error: "#FF6D00", + warning: "#FFB300", + info: "#5C6BC0", + success: "#43A047", +}; + +export {theme, darkTheme}; diff --git a/app/imports/ui/vueSetup.js b/app/imports/ui/vueSetup.js index 76d2e18d..1bf91c51 100644 --- a/app/imports/ui/vueSetup.js +++ b/app/imports/ui/vueSetup.js @@ -5,7 +5,7 @@ import store from "/imports/ui/vuexStore.js"; import VueMeteorTracker from 'vue-meteor-tracker'; import AppLayout from '/imports/ui/layouts/AppLayout.vue'; import router from "/imports/ui/router.js"; -import theme from '/imports/ui/theme.js'; +import { theme } from '/imports/ui/theme.js'; import "vuetify/dist/vuetify.min.css"; import '/imports/ui/components/global/globalIndex.js'; diff --git a/app/imports/ui/vuexStore.js b/app/imports/ui/vuexStore.js index 3ab8cbf6..034b7467 100644 --- a/app/imports/ui/vuexStore.js +++ b/app/imports/ui/vuexStore.js @@ -10,6 +10,7 @@ const store = new Vuex.Store({ }, state: { drawer: undefined, + darkMode: false, }, mutations: { toggleDrawer (state) { @@ -18,6 +19,9 @@ const store = new Vuex.Store({ setDrawer(state, value){ state.drawer = value; }, + setDarkMode(state, value){ + state.darkMode = value; + }, }, });