export default { namespaced: true, state: { stack: [], hidden: false, }, mutations: { setStack: (state, value) => { state.stack = value; }, setHidden: (state, value) => { state.hidden = value; }, }, getters: { config: state => !state.hidden && state.stack[0], }, actions: { open({ commit, state }, param) { return new Promise((resolve, reject) => { const config = typeof param === 'object' ? { ...param } : { type: param }; const clean = () => commit('setStack', state.stack.filter((otherConfig => otherConfig !== config))); config.resolve = (result) => { clean(); if (config.onResolve) { config.onResolve(result) .then(res => resolve(res)); } else { resolve(result); } }; config.reject = (error) => { clean(); reject(error); }; commit('setStack', [config, ...state.stack]); }); }, hideUntil({ commit, state }, promise) { commit('setHidden', true); return promise.then((res) => { commit('setHidden', false); return res; }, (err) => { commit('setHidden', false); throw err; }); }, fileDeletion: ({ dispatch }, item) => dispatch('open', { content: `
You are about to delete the file ${item.name}. Are you sure?
`, resolveText: 'Yes, delete', rejectText: 'No', }), folderDeletion: ({ dispatch }, item) => dispatch('open', { content: `You are about to delete the folder ${item.name} and all its files. Are you sure?
`, resolveText: 'Yes, delete', rejectText: 'No', }), discussionDeletion: ({ dispatch }) => dispatch('open', { content: 'You are about to delete a discussion. Are you sure?
', resolveText: 'Yes, delete', rejectText: 'No', }), commentDeletion: ({ dispatch }) => dispatch('open', { content: 'You are about to delete a comment. Are you sure?
', resolveText: 'Yes, delete', rejectText: 'No', }), trashDeletion: ({ dispatch }) => dispatch('open', { content: 'Files in the trash are automatically deleted after 7 days of inactivity.
', resolveText: 'Ok', }), reset: ({ dispatch }) => dispatch('open', { content: 'This will clean your local files and settings. Are you sure?
', resolveText: 'Yes, clean', rejectText: 'No', }), providerRedirection: ({ dispatch }, { providerName, onResolve }) => dispatch('open', { content: `You are about to navigate to the ${providerName} authorization page.
`, resolveText: 'Ok, go on', rejectText: 'Cancel', onResolve, }), signInForSponsorship: ({ dispatch }) => dispatch('open', { type: 'signInForSponsorship', content: `You have to sign in with Google to enable your sponsorship.
You have to sign in with Google to start commenting.
This feature is restricted to sponsor users as it relies on server resources.
', resolveText: 'Ok, I understand', }), paymentSuccess: ({ dispatch }) => dispatch('open', { content: 'Thank you for your payment! Your sponsorship will be active in a minute.
', resolveText: 'Ok', }), }, };