2023-05-29 21:36:23 +00:00
|
|
|
import { defineStore } from 'pinia';
|
|
|
|
import { useBotStore } from './ftbotwrapper';
|
|
|
|
|
|
|
|
import { Pairlist, PairlistConfig, PairlistsPayload } from '@/types';
|
|
|
|
import { computed, ref, toRaw } from 'vue';
|
|
|
|
import { showAlert } from './alerts';
|
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
export const usePairlistConfigStore = defineStore(
|
|
|
|
'pairlistConfig',
|
|
|
|
() => {
|
|
|
|
const botStore = useBotStore();
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
const evaluating = ref<boolean>(false);
|
|
|
|
const intervalId = ref<number>();
|
|
|
|
const whitelist = ref<string[]>([]);
|
|
|
|
const config = ref<PairlistConfig>({ name: '', pairlists: [] });
|
|
|
|
const savedConfigs = ref<PairlistConfig[]>([]);
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
const firstPairlistIsGenerator = computed<boolean>(() => {
|
|
|
|
// First pairlist must be a generator
|
|
|
|
if (config.value.pairlists[0]?.is_pairlist_generator) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
const pairlistValid = computed<boolean>(() => {
|
|
|
|
return firstPairlistIsGenerator.value && config.value.pairlists.length > 0;
|
|
|
|
});
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
async function startPairlistEvaluation(payload: PairlistsPayload) {
|
|
|
|
evaluating.value = true;
|
|
|
|
await botStore.activeBot.evaluatePairlist(payload);
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
intervalId.value = setInterval(async () => {
|
|
|
|
const res = await botStore.activeBot.getPairlistEvalStatus();
|
|
|
|
if (res.status === 'success' && res.result) {
|
|
|
|
clearInterval(intervalId.value);
|
|
|
|
evaluating.value = false;
|
|
|
|
whitelist.value = res.result.whitelist;
|
|
|
|
} else if (res.error) {
|
|
|
|
showAlert(res.error, 'danger');
|
|
|
|
clearInterval(intervalId.value);
|
|
|
|
evaluating.value = false;
|
|
|
|
}
|
|
|
|
}, 1000);
|
|
|
|
}
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
function addToConfig(pairlist: Pairlist, index: number) {
|
|
|
|
pairlist = structuredClone(toRaw(pairlist));
|
|
|
|
for (const param in pairlist.params) {
|
|
|
|
pairlist.params[param].value = pairlist.params[param].default
|
|
|
|
? pairlist.params[param].default.toString()
|
|
|
|
: '';
|
|
|
|
}
|
|
|
|
config.value.pairlists.splice(index, 0, pairlist);
|
2023-05-29 21:36:23 +00:00
|
|
|
}
|
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
function removeFromConfig(index: number) {
|
|
|
|
config.value.pairlists.splice(index, 1);
|
|
|
|
}
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-30 10:42:17 +00:00
|
|
|
function saveConfig() {
|
2023-05-29 22:24:48 +00:00
|
|
|
const i = savedConfigs.value.findIndex((c) => c.name === config.value.name);
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
if (i > -1) {
|
2023-05-30 10:42:17 +00:00
|
|
|
savedConfigs.value[i] = config.value;
|
2023-05-29 22:24:48 +00:00
|
|
|
} else {
|
2023-05-30 10:42:17 +00:00
|
|
|
savedConfigs.value.push(config.value);
|
2023-05-29 22:24:48 +00:00
|
|
|
}
|
2023-05-30 10:42:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function newConfig() {
|
|
|
|
config.value = { name: '', pairlists: [] };
|
|
|
|
}
|
|
|
|
|
|
|
|
function selectConfig(selected: PairlistConfig) {
|
|
|
|
config.value = structuredClone(toRaw(selected));
|
|
|
|
}
|
2023-05-29 21:36:23 +00:00
|
|
|
|
2023-05-29 22:24:48 +00:00
|
|
|
return {
|
|
|
|
evaluating,
|
|
|
|
whitelist,
|
|
|
|
config,
|
|
|
|
savedConfigs,
|
|
|
|
startPairlistEvaluation,
|
|
|
|
addToConfig,
|
|
|
|
removeFromConfig,
|
|
|
|
saveConfig,
|
2023-05-30 10:42:17 +00:00
|
|
|
selectConfig,
|
|
|
|
newConfig,
|
2023-05-29 22:24:48 +00:00
|
|
|
firstPairlistIsGenerator,
|
|
|
|
pairlistValid,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
{
|
|
|
|
persist: {
|
|
|
|
key: 'pairlist-configs',
|
|
|
|
paths: ['savedConfigs'],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
);
|