125 lines
3.5 KiB
Vue
125 lines
3.5 KiB
Vue
<template>
|
|
<button
|
|
type="button"
|
|
id="logoutButton"
|
|
v-on:click="send_orders()"
|
|
>ayy lmao button</button>
|
|
<HotTable
|
|
ref="hotTableComponent"
|
|
:settings="DefaultSettings()"
|
|
></HotTable>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { onMounted, ref } from 'vue';
|
|
import { HotTable, HotColumn } from '@handsontable/vue3';
|
|
|
|
const storeRefs = useStoreRef()
|
|
const {invs, activeTable, columns, tags, dirty, chars, currentSearch, orders} = storeRefs
|
|
|
|
const hotTableComponent = ref<any>(null)
|
|
const hott = ():Handsontable =>{
|
|
return hotTableComponent.value.hotInstance as any
|
|
}
|
|
const session = storage.GetSession()
|
|
const api:LTOApi = getLTOState(LTOApiv0, session, useStoreRef())
|
|
const manager = new OrderSender(storeRefs)
|
|
|
|
const updateTable = ():TableRecipe | undefined => {
|
|
if (invs.value.has(activeTable.value)) {
|
|
const chardat = invs.value.get(activeTable.value)
|
|
if (chardat) {
|
|
const it = new InventoryTable(chardat, {
|
|
columns: columns.value,
|
|
tags: tags.value,
|
|
accounts: Array.from(chars.value.keys()),
|
|
} as InventoryTableOptions)
|
|
const build = it.BuildTable()
|
|
hott().updateSettings(build.settings)
|
|
return build
|
|
}
|
|
}
|
|
return undefined
|
|
}
|
|
|
|
watch(currentSearch, ()=>{
|
|
filterTable()
|
|
})
|
|
|
|
const send_orders = () => {
|
|
if(hott()) {
|
|
const headers = hott().getColHeader()
|
|
const dat = hott().getData()
|
|
const idxNumber = headers.indexOf(Columns.MoveCount.displayName)
|
|
const idxTarget = headers.indexOf(Columns.Move.displayName)
|
|
const origin = activeTable
|
|
const pending:OrderDetails[] = [];
|
|
for(const row of dat) {
|
|
const nm = Number(row[idxNumber].replace("x",""))
|
|
const target = (row[idxTarget] as string).replaceAll("-","").trim()
|
|
if(!isNaN(nm) && nm > 0 && target.length > 0){
|
|
const info:OrderDetails = {
|
|
item_uid: row[0].toString(),
|
|
count: nm,
|
|
origin_path: origin.value,
|
|
target_path: target,
|
|
}
|
|
pending.push(info)
|
|
}
|
|
}
|
|
log.debug("OrderDetails", pending)
|
|
for(const d of pending){
|
|
const order = manager.send(d)
|
|
order.tick(storeRefs, api)
|
|
}
|
|
saveStore();
|
|
}
|
|
}
|
|
|
|
|
|
onMounted(()=>{
|
|
window.setInterval(tick_orders, 1000)
|
|
})
|
|
const tick_orders = () => {
|
|
if(orders && storeRefs && api){
|
|
orders.value.tick(storeRefs, api)
|
|
}
|
|
}
|
|
|
|
|
|
const filterTable = () => {
|
|
if(hott()){
|
|
const fp = hott().getPlugin('filters')
|
|
fp.removeConditions(2)
|
|
fp.addCondition(2,'contains', [currentSearch.value])
|
|
fp.filter()
|
|
}
|
|
}
|
|
// register Handsontable's modules
|
|
registerAllModules();
|
|
|
|
watch([columns.value.dirty, tags.value.dirty, activeTable, dirty], () => {
|
|
log.debug(`${dirty.value} rendering inventory`, activeTable.value)
|
|
let u = updateTable()
|
|
saveStore()
|
|
})
|
|
|
|
</script>
|
|
|
|
<script lang="ts">
|
|
import { defineComponent, computed, PropType, defineProps, defineEmits, watch} from 'vue';
|
|
import { registerAllModules } from 'handsontable/registry';
|
|
import { DefaultSettings, InventoryTable, InventoryTableOptions, TableRecipe } from '../lib/table';
|
|
import { Columns, ColumnByNames, ColumnInfo } from '../lib/columns';
|
|
import { TricksterItem} from '../lib/trickster';
|
|
import Handsontable from 'handsontable';
|
|
import { useStoreRef, saveStore } from '../state/state';
|
|
import { storage } from '../session_storage';
|
|
import { getLTOState, LTOApi, LTOApiv0 } from '../lib/lifeto';
|
|
import log, { info } from 'loglevel';
|
|
import { OrderDetails, OrderSender } from '../lib/lifeto/order_manager';
|
|
</script>
|
|
|
|
<style src="handsontable/dist/handsontable.full.css">
|
|
</style>
|