From b8e9c941667dec769ca2f3f6eb7972774257b1d9 Mon Sep 17 00:00:00 2001 From: a Date: Sun, 3 Jul 2022 11:37:06 -0500 Subject: [PATCH] crack --- src/components/CharacterInventory.vue | 1 - src/lib/columns.ts | 38 ++++++++++++++++++++++++--- src/lib/storage.ts | 6 ++++- src/lib/table.ts | 4 --- src/state/state.ts | 3 ++- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/components/CharacterInventory.vue b/src/components/CharacterInventory.vue index 53c3d40..d8d987f 100644 --- a/src/components/CharacterInventory.vue +++ b/src/components/CharacterInventory.vue @@ -20,7 +20,6 @@ const updateTable = ():TableRecipe | undefined => { const hot = (hotTableComponent.value.hotInstance as Handsontable) const build = it.BuildTable() hot.updateSettings(build.settings) - hot.updateData(build.data) return build } } diff --git a/src/lib/columns.ts b/src/lib/columns.ts index 5711d93..1fabf9a 100644 --- a/src/lib/columns.ts +++ b/src/lib/columns.ts @@ -3,6 +3,7 @@ import numbro from 'numbro'; import { textRenderer } from "handsontable/renderers" import { TricksterInventory, TricksterItem } from "./trickster" import Core from "handsontable/core"; +import { RefStore } from "../state/state"; export const BasicColumns = [ @@ -52,6 +53,7 @@ const c = (a:ColumnName | ColumnInfo):ColumnName => { } } export const LazyColumn = c; + export const ColumnSorter = (a:ColumnName | ColumnInfo, b: ColumnName | ColumnInfo):number => { let n1 = ColumnNames.indexOf(c(a)) let n2 = ColumnNames.indexOf(c(b)) @@ -64,6 +66,8 @@ export const ColumnSorter = (a:ColumnName | ColumnInfo, b: ColumnName | ColumnI export interface ColumnInfo { name: ColumnName displayName:string + + options?:(item:TricksterItem, r:RefStore)=>string[] renderer?:any filtering?:boolean writable?:boolean @@ -97,10 +101,28 @@ class Name implements ColumnInfo { name:ColumnName = "Name" displayName = "Name" filtering = true + renderer = nameRenderer getter(item:TricksterItem):(string|number){ return item.item_name } } +function nameRenderer(instance:any, td:any, row:any, col:any, prop:any, value:any, cellProperties:any) { + const stringifiedValue = Handsontable.helper.stringify(value); + let showText = stringifiedValue; + const div= document.createElement('div'); + div.innerHTML = showText + div.title = showText + div.style.maxWidth = "20ch" + div.style.textOverflow = "ellipsis" + div.style.overflow= "hidden" + div.style.whiteSpace= "nowrap" + Handsontable.dom.addEvent(div, 'mousedown', event =>{ + event!.preventDefault(); + }); + Handsontable.dom.empty(td); + td.appendChild(div); + td.classList.add("htLeft") +} class Count implements ColumnInfo { name:ColumnName = "Count" @@ -116,11 +138,23 @@ class Move implements ColumnInfo { name:ColumnName = "Move" displayName = "Target" writable = true + options = getMoveTargets getter(item:TricksterItem):(string|number){ return "-" } } +const getMoveTargets = (item:TricksterItem, r:RefStore):string[] => { + let out:string[] = []; + for(const k of r.invs.value.keys()) { + out.push(k) + } + out.push("") + out.push("") + out.push("!TRASH") + return out +} + class MoveCount implements ColumnInfo { name:ColumnName = "MoveCount" displayName = "Move #" @@ -140,7 +174,6 @@ function moveCountRenderer(instance:Core, td:any, row:number, col:number, prop:a const cellFormatPattern = numericFormat && numericFormat.pattern; const className = cellProperties.className || ''; const classArr = className.length ? className.split(' ') : []; - if (typeof cellCulture !== 'undefined' && !numbro.languages()[cellCulture]) { const shortTag:any = cellCulture.replace('-', ''); const langData = (numbro as any)[shortTag]; @@ -149,7 +182,6 @@ function moveCountRenderer(instance:Core, td:any, row:number, col:number, prop:a numbro.registerLanguage(langData); } } - const totalCount = Number(instance.getCell(row,col-1)?.innerHTML) numbro.setLanguage(cellCulture); const num = numbro(newValue) @@ -168,7 +200,6 @@ function moveCountRenderer(instance:Core, td:any, row:number, col:number, prop:a if (classArr.indexOf('htNumeric') < 0) { classArr.push('htNumeric'); } - cellProperties.className = classArr.join(' '); td.dir = 'ltr'; @@ -177,7 +208,6 @@ function moveCountRenderer(instance:Core, td:any, row:number, col:number, prop:a newValue = "" } textRenderer(instance, td, row, col, prop, newValue, cellProperties); - } class Equip implements ColumnInfo { diff --git a/src/lib/storage.ts b/src/lib/storage.ts index d68c664..d62923e 100644 --- a/src/lib/storage.ts +++ b/src/lib/storage.ts @@ -14,6 +14,7 @@ //} import { ColumnSet } from "./table" +import { dummyChar, TricksterInventory } from "./trickster" export const ARRAY_SEPERATOR = "," @@ -46,4 +47,7 @@ export const StoreColSet = { Murder: (s:ColumnSet):string=>Array.from(s.s.values()).join(as), Revive: (s:string):ColumnSet=>new ColumnSet(s.split(as)) } - +export const StoreInvs = { + Murder: (s:Map):string=>Array.from(s.keys()).join(as), + Revive: (s:string):Map=>new Map(s.split(as).map((x)=>[x, dummyChar(x)])), +} diff --git a/src/lib/table.ts b/src/lib/table.ts index 8adb835..d37ef26 100644 --- a/src/lib/table.ts +++ b/src/lib/table.ts @@ -165,10 +165,6 @@ export const DefaultSettings = ():HotTableProps=>{ filters: true, manualRowMove: false, manualColumnMove: false, - autoColumnSize: { - syncLimit: 1000, - useHeaders: true, - }, allowInsertRow: false, allowInsertColumn: false, allowRemoveRow: false, diff --git a/src/state/state.ts b/src/state/state.ts index 41a20c8..86cd148 100644 --- a/src/state/state.ts +++ b/src/state/state.ts @@ -2,7 +2,7 @@ import { defineStore, storeToRefs } from 'pinia' import { getCookie, setCookie } from 'typescript-cookie' import { useCookies } from 'vue3-cookies' import { BasicColumns, ColumnInfo, ColumnName, Columns, DetailsColumns, MoveColumns } from '../lib/columns' -import { Reviver, StoreColSet, StoreStr, StoreStrSet } from '../lib/storage' +import { Reviver, StoreColSet, StoreInvs, StoreStr, StoreStrSet } from '../lib/storage' import { ColumnSet } from '../lib/table' import { TricksterInventory } from '../lib/trickster' import { nameCookie} from '../session_storage' @@ -36,6 +36,7 @@ export const useStore = defineStore('state', { }) export const StoreReviver = { + invs: StoreInvs, accounts: StoreStrSet, activeTable: StoreStr, screen: StoreStr,