45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import {ruleBookApi, ruleScriptApi} from "@/mammon";
|
|
import {RuleBookResponse, RuleScopeRequest, RuleScriptRequest, RuleScriptResponse, UpdateRuleBookRequest} from "@/generated/mammon";
|
|
import {isAxiosError} from "axios";
|
|
import {defineStore} from "pinia";
|
|
import {ref} from "vue";
|
|
|
|
export type RuleBook = RuleBookResponse;
|
|
export type RuleScript = RuleScriptResponse;
|
|
export type RuleScope = RuleScriptResponse['scope'];
|
|
|
|
export const emptyScope = (): RuleScopeRequest => ({
|
|
ledgers: {},
|
|
characters: {},
|
|
corporations: {},
|
|
walletDivisions: {},
|
|
});
|
|
|
|
export const useRuleBookStore = defineStore('rule-book', () => {
|
|
const ruleBook = ref<RuleBook | null>(null);
|
|
|
|
const refresh = () => ruleBookApi.findRuleBook()
|
|
.then(response => ruleBook.value = response.data)
|
|
.catch(error => {
|
|
if (isAxiosError(error) && error.response?.status === 404) {
|
|
ruleBook.value = null;
|
|
return;
|
|
}
|
|
throw error;
|
|
});
|
|
|
|
const update = (scripts: RuleScriptRequest[]) => ruleBookApi.updateRuleBook({scripts} satisfies UpdateRuleBookRequest)
|
|
.then(response => ruleBook.value = response.data);
|
|
|
|
refresh();
|
|
|
|
return {ruleBook, update};
|
|
})
|
|
|
|
export const fetchScriptDefinitions = (): Promise<string> =>
|
|
ruleScriptApi.listScriptDefinitions()
|
|
.then(response => Promise.all(
|
|
response.data.map(name => ruleScriptApi.getScriptDefinition(name, {responseType: 'text'}).then(r => r.data))
|
|
))
|
|
.then(definitions => definitions.join('\n'));
|