mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-02 03:57:52 +00:00
172 lines
5.2 KiB
JavaScript
172 lines
5.2 KiB
JavaScript
import * as MutationHelpers from 'shared/helpers/vuex/mutationHelpers';
|
|
import * as types from '../mutation-types';
|
|
import AccountAPI from '../../api/account';
|
|
import { differenceInDays } from 'date-fns';
|
|
import EnterpriseAccountAPI from '../../api/enterprise/account';
|
|
import { throwErrorMessage } from '../utils/api';
|
|
import { getLanguageDirection } from 'dashboard/components/widgets/conversation/advancedFilterItems/languages';
|
|
|
|
const findRecordById = ($state, id) =>
|
|
$state.records.find(record => record.id === Number(id)) || {};
|
|
|
|
const TRIAL_PERIOD_DAYS = 15;
|
|
|
|
const state = {
|
|
records: [],
|
|
uiFlags: {
|
|
isFetching: false,
|
|
isFetchingItem: false,
|
|
isUpdating: false,
|
|
isCheckoutInProcess: false,
|
|
},
|
|
};
|
|
|
|
export const getters = {
|
|
getAccount: $state => id => {
|
|
return findRecordById($state, id);
|
|
},
|
|
getUIFlags($state) {
|
|
return $state.uiFlags;
|
|
},
|
|
isRTL: ($state, _, rootState) => {
|
|
const accountId = rootState.route?.params?.accountId;
|
|
if (!accountId) return false;
|
|
|
|
const { locale } = findRecordById($state, Number(accountId));
|
|
return locale ? getLanguageDirection(locale) : false;
|
|
},
|
|
isTrialAccount: $state => id => {
|
|
const account = findRecordById($state, id);
|
|
const createdAt = new Date(account.created_at);
|
|
const diffDays = differenceInDays(new Date(), createdAt);
|
|
|
|
return diffDays <= TRIAL_PERIOD_DAYS;
|
|
},
|
|
isFeatureEnabledonAccount: $state => (id, featureName) => {
|
|
const { features = {} } = findRecordById($state, id);
|
|
return features[featureName] || false;
|
|
},
|
|
};
|
|
|
|
export const actions = {
|
|
get: async ({ commit }) => {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isFetchingItem: true });
|
|
try {
|
|
const response = await AccountAPI.get();
|
|
commit(types.default.ADD_ACCOUNT, response.data);
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, {
|
|
isFetchingItem: false,
|
|
});
|
|
} catch (error) {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, {
|
|
isFetchingItem: false,
|
|
});
|
|
}
|
|
},
|
|
update: async ({ commit }, { options, ...updateObj }) => {
|
|
if (options?.silent !== true) {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: true });
|
|
}
|
|
|
|
try {
|
|
const response = await AccountAPI.update('', updateObj);
|
|
commit(types.default.EDIT_ACCOUNT, response.data);
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: false });
|
|
} catch (error) {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: false });
|
|
throw new Error(error);
|
|
}
|
|
},
|
|
delete: async ({ commit }, { id }) => {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: true });
|
|
try {
|
|
await AccountAPI.delete(id);
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: false });
|
|
} catch (error) {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: false });
|
|
throw new Error(error);
|
|
}
|
|
},
|
|
toggleDeletion: async (
|
|
{ commit },
|
|
{ action_type } = { action_type: 'delete' }
|
|
) => {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: true });
|
|
try {
|
|
await EnterpriseAccountAPI.toggleDeletion(action_type);
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: false });
|
|
} catch (error) {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isUpdating: false });
|
|
throw new Error(error);
|
|
}
|
|
},
|
|
create: async ({ commit }, accountInfo) => {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isCreating: true });
|
|
try {
|
|
const response = await AccountAPI.createAccount(accountInfo);
|
|
const account_id = response.data.data.account_id;
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isCreating: false });
|
|
return account_id;
|
|
} catch (error) {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isCreating: false });
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
checkout: async ({ commit }) => {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isCheckoutInProcess: true });
|
|
try {
|
|
const response = await EnterpriseAccountAPI.checkout();
|
|
window.location = response.data.redirect_url;
|
|
} catch (error) {
|
|
throwErrorMessage(error);
|
|
} finally {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isCheckoutInProcess: false });
|
|
}
|
|
},
|
|
|
|
subscription: async ({ commit }) => {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isCheckoutInProcess: true });
|
|
try {
|
|
await EnterpriseAccountAPI.subscription();
|
|
} catch (error) {
|
|
throwErrorMessage(error);
|
|
} finally {
|
|
commit(types.default.SET_ACCOUNT_UI_FLAG, { isCheckoutInProcess: false });
|
|
}
|
|
},
|
|
|
|
limits: async ({ commit }) => {
|
|
try {
|
|
const response = await EnterpriseAccountAPI.getLimits();
|
|
commit(types.default.SET_ACCOUNT_LIMITS, response.data);
|
|
} catch (error) {
|
|
// silent error
|
|
}
|
|
},
|
|
|
|
getCacheKeys: async () => {
|
|
return AccountAPI.getCacheKeys();
|
|
},
|
|
};
|
|
|
|
export const mutations = {
|
|
[types.default.SET_ACCOUNT_UI_FLAG]($state, data) {
|
|
$state.uiFlags = {
|
|
...$state.uiFlags,
|
|
...data,
|
|
};
|
|
},
|
|
[types.default.ADD_ACCOUNT]: MutationHelpers.setSingleRecord,
|
|
[types.default.EDIT_ACCOUNT]: MutationHelpers.update,
|
|
[types.default.SET_ACCOUNT_LIMITS]: MutationHelpers.updateAttributes,
|
|
};
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state,
|
|
getters,
|
|
actions,
|
|
mutations,
|
|
};
|