64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
import { store } from '../_store/store.js'
|
|
import { createFilter, getFilters, updateFilter, deleteFilter as doDeleteFilter } from '../_api/filters.js'
|
|
import { cacheFirstUpdateAfter, cacheFirstUpdateOnlyIfNotInCache } from '../_utils/sync.js'
|
|
import { database } from '../_database/database.js'
|
|
import { isEqual } from '../_thirdparty/lodash/objects.js'
|
|
import { toast } from '../_components/toast/toast.js'
|
|
import { formatIntl } from '../_utils/formatIntl.js'
|
|
import { emit } from '../_utils/eventBus.js'
|
|
|
|
async function syncFilters (instanceName, syncMethod) {
|
|
const { loggedInInstances } = store.get()
|
|
const accessToken = loggedInInstances[instanceName].access_token
|
|
|
|
await syncMethod(
|
|
() => getFilters(instanceName, accessToken),
|
|
() => database.getFilters(instanceName),
|
|
filters => database.setFilters(instanceName, filters),
|
|
filters => {
|
|
const { instanceFilters } = store.get()
|
|
if (!isEqual(instanceFilters[instanceName], filters)) { // avoid re-render if nothing changed
|
|
instanceFilters[instanceName] = filters
|
|
store.set({ instanceFilters })
|
|
}
|
|
}
|
|
)
|
|
}
|
|
|
|
export async function updateFiltersForInstance (instanceName) {
|
|
await syncFilters(instanceName, cacheFirstUpdateAfter)
|
|
}
|
|
|
|
export async function setupFiltersForInstance (instanceName) {
|
|
await syncFilters(instanceName, cacheFirstUpdateOnlyIfNotInCache)
|
|
}
|
|
|
|
export async function createOrUpdateFilter (instanceName, filter) {
|
|
const { loggedInInstances } = store.get()
|
|
const accessToken = loggedInInstances[instanceName].access_token
|
|
try {
|
|
if (filter.id) {
|
|
await updateFilter(instanceName, accessToken, filter)
|
|
/* no await */ toast.say('intl.updatedFilter')
|
|
} else {
|
|
await createFilter(instanceName, accessToken, filter)
|
|
/* no await */ toast.say('intl.createdFilter')
|
|
}
|
|
emit('wordFiltersChanged', instanceName)
|
|
} catch (err) {
|
|
/* no await */ toast.say(formatIntl('intl.failedToModifyFilter', err.message || ''))
|
|
}
|
|
}
|
|
|
|
export async function deleteFilter (instanceName, id) {
|
|
const { loggedInInstances } = store.get()
|
|
const accessToken = loggedInInstances[instanceName].access_token
|
|
try {
|
|
await doDeleteFilter(instanceName, accessToken, id)
|
|
/* no await */ toast.say('intl.deletedFilter')
|
|
emit('wordFiltersChanged', instanceName)
|
|
} catch (err) {
|
|
/* no await */ toast.say(formatIntl('intl.failedToModifyFilter', err.message || ''))
|
|
}
|
|
}
|