Files
chatwoot/app/javascript/dashboard/store/modules/teams/actions.js
Shivam Mishra 00ee0478eb feat: IndexedDB based caching for labels, inboxes and teams [CW-50] (#6710)
* feat: allow caching of labels in the account scope

* feat: send cache keys in account json response

* feat: kickstart web worker

* feat: setup basic architecture for workers

* feat: install idb

* feat: add datamanger

* fix: typos

* refactor: rename method

* feat: make init db a manual step

* refactor: separate accountIdFromRoute

* feat: cache enabled API client

* feat: enable caching for inboxes and labels

* feat: enable cache for team

* feat: manage exceptions for team

* feat: add team to data manager

* feat: add a generic listener

* refactor: send only cache keys

* refactor: separate validate method

* feat: add listeners

* feat: add event for revalidate

* feat: add cache keys endpoint

* refactor: fetch cache keys instead of full account data

* fix: key pattern

* feat: don't fetch account for cache_keys

* fix: cache key base class

* refactor: cache keys helper

* feat: add helper

* fix: cache-key update logic

* feat: delete indexeddb on logout

* feat: remove worker.js

* refactor: move data-manager

* refactor: name of file

* feat: add test for DataManager

* refactor: add fake idb to jest setup

* test: cache keys helper

* test: cache keys helper

* test: cache_keys in accounts controller

* refactor: remove cache_keys context

* feat: add policy for cache-keys
2023-03-27 12:16:25 +05:30

90 lines
2.3 KiB
JavaScript

import {
SET_TEAM_UI_FLAG,
CLEAR_TEAMS,
SET_TEAMS,
SET_TEAM_ITEM,
EDIT_TEAM,
DELETE_TEAM,
} from './types';
import TeamsAPI from '../../../api/teams';
export const actions = {
create: async ({ commit }, teamInfo) => {
commit(SET_TEAM_UI_FLAG, { isCreating: true });
try {
const response = await TeamsAPI.create(teamInfo);
const team = response.data;
commit(SET_TEAM_ITEM, team);
return team;
} catch (error) {
throw new Error(error);
} finally {
commit(SET_TEAM_UI_FLAG, { isCreating: false });
}
},
revalidate: async ({ commit }, { newKey }) => {
try {
const isExistingKeyValid = await TeamsAPI.validateCacheKey(newKey);
if (!isExistingKeyValid) {
const response = await TeamsAPI.refetchAndCommit(newKey);
commit(SET_TEAMS, response.data);
}
} catch (error) {
// Ignore error
}
},
get: async ({ commit }) => {
commit(SET_TEAM_UI_FLAG, { isFetching: true });
try {
const { data } = await TeamsAPI.get(true);
commit(CLEAR_TEAMS);
commit(SET_TEAMS, data);
} catch (error) {
throw new Error(error);
} finally {
commit(SET_TEAM_UI_FLAG, { isFetching: false });
}
},
show: async ({ commit }, { id }) => {
commit(SET_TEAM_UI_FLAG, { isFetchingItem: true });
try {
const response = await TeamsAPI.show(id);
commit(SET_TEAM_ITEM, response.data.payload);
commit(SET_TEAM_UI_FLAG, {
isFetchingItem: false,
});
} catch (error) {
throw new Error(error);
} finally {
commit(SET_TEAM_UI_FLAG, {
isFetchingItem: false,
});
}
},
update: async ({ commit }, { id, ...updateObj }) => {
commit(SET_TEAM_UI_FLAG, { isUpdating: true });
try {
const response = await TeamsAPI.update(id, updateObj);
commit(EDIT_TEAM, response.data);
} catch (error) {
throw new Error(error);
} finally {
commit(SET_TEAM_UI_FLAG, { isUpdating: false });
}
},
delete: async ({ commit }, teamId) => {
commit(SET_TEAM_UI_FLAG, { isDeleting: true });
try {
await TeamsAPI.delete(teamId);
commit(DELETE_TEAM, teamId);
} catch (error) {
throw new Error(error);
} finally {
commit(SET_TEAM_UI_FLAG, { isDeleting: false });
}
},
};