mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-06-11 03:20:14 -04:00
* fix links * actually fix #238 * Feature/mkdocs version bump (#240) * fix links (#239) Co-authored-by: hay-kot <hay-kot@pm.me> * fix #238 * bump mkdocs version * light/dark toggle * light/dark mode css * API_DOCS defaults to True * disable build on push for master Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/recipe viewer (#244) * fix dialog placement * markdown support in ingredients * fix line render issue * fix tag rendering bug * change ingredients to text area * no slug error * add tag pages * remove console.logs Co-authored-by: hay-kot <hay-kot@pm.me> * changelog v0.4.1 * bug/backup-download (#245) * fix blocked download * + download blocked Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/meal planner (#246) * fixes duplicate recipes in meal-plan #221 * add quick week option * scope css * add mealplanner info Co-authored-by: hay-kot <hay-kot@pm.me> * Nextcloud Import Bugs - #248 (#250) * parses datetime properly + clean category - #248 * add default credentials to docs Co-authored-by: hay-kot <hay-kot@pm.me> * Add bulk import examples to docs. (#252) * Add bulk import examples to docs. * Update api-usage.md * Add Python example for bulk import. * Change IP address in API example. * Refactor/app settings (#251) * fix env setup bugs * remove unused import * fix layout issues * changelog Co-authored-by: hay-kot <hay-kot@pm.me> * env setup fixes * Feature/about api (#253) * fix settings * app info cleanup Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/image minify (#256) * fix settings * app info cleanup * bottom-bar experiment * remove dup key * type hints * add dependency * updated image with query parameters * read image options * add image minification * add image minification step * alt image routes * add image minification * set mobile bar to top Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/additional endpoints (#257) * new recipe summary route * add categories to cards * add pillow * show tags instead of categories * additional debug info * add todays meal image url * about page * fix reactive tag * changelog + docs * bump version Co-authored-by: hay-kot <hay-kot@pm.me> * add pillow dependencies (#258) Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/search page (#259) * add pillow dependencies * advanced search page * advanced search apge * remove extra dependencies * add pre-run script Co-authored-by: hay-kot <hay-kot@pm.me> * no image assignment * advanced search * fix docker dev build * Do not force theme settings on login form (#260) * Fix docker dev db persistence (#264) * Fix docker dev db persistence * Make run.sh the only startup script for prod + dev Credits to @hay-kot for run.sh script logic * Restore dev backend initialization in non-docker setup * Make run.sh POSIX-friendly * Allow dev backend to auto-reload in Docker * Frontend Refactor + Bug Fixes * merge category and tag selector * unifiy category selector * add hint * spacing * fix nextcloud migration * simplify email validator #261 * formatting * cleanup * auto-gen * format * update run script * unified category/tag selector * rename component * Add advanced search link * remove old code * convert keywords to tags * add proper behavior on rename * proper image name association on rename * fix test cleanup * changelog * set docker comppand * minify on migration Co-authored-by: hay-kot <hay-kot@pm.me> * bug-fixes/category-tag-creator (#266) * fix category labels * set loader for migration * v0.4.1 Co-authored-by: hay-kot <hay-kot@pm.me> Co-authored-by: hay-kot <hay-kot@pm.me> Co-authored-by: Nat <nathanynath@yahoo.fr> Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
import { api } from "@/api";
|
|
import Vuetify from "../../plugins/vuetify";
|
|
import axios from "axios";
|
|
|
|
function inDarkMode(payload) {
|
|
let isDark;
|
|
|
|
if (payload === "system") {
|
|
//Get System Preference from browser
|
|
const darkMediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
isDark = darkMediaQuery.matches;
|
|
} else if (payload === "dark") isDark = true;
|
|
else if (payload === "light") isDark = false;
|
|
|
|
return isDark;
|
|
}
|
|
|
|
const state = {
|
|
activeTheme: {},
|
|
darkMode: "light",
|
|
isDark: false,
|
|
isLoggedIn: false,
|
|
token: "",
|
|
userData: {},
|
|
};
|
|
|
|
const mutations = {
|
|
setTheme(state, payload) {
|
|
Vuetify.framework.theme.themes.dark = payload.colors;
|
|
Vuetify.framework.theme.themes.light = payload.colors;
|
|
state.activeTheme = payload;
|
|
},
|
|
setDarkMode(state, payload) {
|
|
let isDark = inDarkMode(payload);
|
|
|
|
if (isDark !== null) {
|
|
Vuetify.framework.theme.dark = isDark;
|
|
state.isDark = isDark;
|
|
state.darkMode = payload;
|
|
}
|
|
},
|
|
setIsLoggedIn(state, payload) {
|
|
state.isLoggedIn = payload;
|
|
},
|
|
setToken(state, payload) {
|
|
state.isLoggedIn = true;
|
|
axios.defaults.headers.common["Authorization"] = `Bearer ${payload}`;
|
|
state.token = payload;
|
|
},
|
|
|
|
setUserData(state, payload) {
|
|
state.userData = payload;
|
|
},
|
|
};
|
|
|
|
const actions = {
|
|
async requestUserData({ commit }) {
|
|
const userData = await api.users.self();
|
|
commit("setUserData", userData);
|
|
},
|
|
|
|
async resetTheme({ commit }) {
|
|
const defaultTheme = await api.themes.requestByName("default");
|
|
if (defaultTheme.colors) {
|
|
Vuetify.framework.theme.themes.dark = defaultTheme.colors;
|
|
Vuetify.framework.theme.themes.light = defaultTheme.colors;
|
|
commit("setTheme", defaultTheme);
|
|
}
|
|
},
|
|
|
|
async refreshToken({ commit, getters }) {
|
|
if (!getters.getIsLoggedIn) {
|
|
commit("setIsLoggedIn", false); // This has to be here... for some reasons? ¯\_(ツ)_/¯
|
|
console.log("Not Logged In");
|
|
return;
|
|
}
|
|
try {
|
|
let authResponse = await api.users.refresh();
|
|
commit("setToken", authResponse.access_token);
|
|
} catch {
|
|
console.log("Failed Token Refresh, Logging Out...");
|
|
commit("setIsLoggedIn", false);
|
|
}
|
|
},
|
|
|
|
async initTheme({ dispatch, getters }) {
|
|
//If theme is empty resetTheme
|
|
if (Object.keys(getters.getActiveTheme).length === 0) {
|
|
await dispatch("resetTheme");
|
|
} else {
|
|
Vuetify.framework.theme.dark = inDarkMode(getters.getDarkMode);
|
|
Vuetify.framework.theme.themes.dark = getters.getActiveTheme.colors;
|
|
Vuetify.framework.theme.themes.light = getters.getActiveTheme.colors;
|
|
}
|
|
},
|
|
};
|
|
|
|
const getters = {
|
|
getActiveTheme: state => state.activeTheme,
|
|
getDarkMode: state => state.darkMode,
|
|
getIsDark: state => state.isDark,
|
|
getIsLoggedIn: state => state.isLoggedIn,
|
|
getToken: state => state.token,
|
|
getUserData: state => state.userData,
|
|
};
|
|
|
|
export default {
|
|
state,
|
|
mutations,
|
|
actions,
|
|
getters,
|
|
};
|