diff --git a/src/app/App.ts b/src/app/App.ts index 6accbd36..799c1c5f 100644 --- a/src/app/App.ts +++ b/src/app/App.ts @@ -1,4 +1,4 @@ -import { CollectionRegistry, DataModel, ObjectNode, PathError, SchemaRegistry } from '@mcschema/core'; +import { CollectionRegistry, DataModel, ObjectNode, SchemaRegistry } from '@mcschema/core'; import * as java16 from '@mcschema/java-1.16' import * as java17 from '@mcschema/java-1.17' import { LocalStorageProperty } from './state/LocalStorageProperty'; @@ -11,6 +11,7 @@ import { DecoratorPreview } from './preview/DecoratorPreview'; import config from '../config.json'; import { locale, Locales } from './Locales'; import { Tracker } from './Tracker'; +import { Settings } from './Settings'; const Versions: { [versionId: string]: { @@ -54,6 +55,7 @@ export const App = { localesLoaded: new Property(false), loaded: new Property(false), mobilePanel: new Property('tree'), + settings: new Settings('generator_settings') } App.version.watchRun(async (value) => { diff --git a/src/app/Router.ts b/src/app/Router.ts index 03f9a3e2..2953d258 100644 --- a/src/app/Router.ts +++ b/src/app/Router.ts @@ -1,6 +1,7 @@ import { App, Models } from './App'; import { View } from './views/View'; import { Home } from './views/Home' +import { FieldSettings } from './views/FieldSettings' import { Generator } from './views/Generator' import { locale } from './Locales'; import { Tracker } from './Tracker'; @@ -19,6 +20,8 @@ const router = async () => { if (urlParts.length === 0){ App.model.set({ id: '', name: 'Data Pack', category: true}) target.innerHTML = Home(view) + } else if (urlParts[0] === 'settings' && urlParts[1] === 'fields') { + target.innerHTML = FieldSettings(view) } else if (urlParts.length === 1 && categories.map(m => m.id).includes(urlParts[0])) { App.model.set(categories.find(m => m.id === urlParts[0])!) target.innerHTML = Home(view) diff --git a/src/app/Settings.ts b/src/app/Settings.ts new file mode 100644 index 00000000..893e2119 --- /dev/null +++ b/src/app/Settings.ts @@ -0,0 +1,22 @@ +type FieldSetting = { + path?: string + name?: string + hidden?: boolean +} + +export class Settings { + fields: FieldSetting[] + + constructor(private local_storage: string) { + const settings = JSON.parse(localStorage.getItem(local_storage) ?? '{}') + if (!Array.isArray(settings.fields)) settings.fields = [] + this.fields = settings.fields + this.save() + } + + save() { + const settings = JSON.stringify({ fields: this.fields }) + localStorage.setItem(this.local_storage, settings) + this.fields = [...this.fields.filter(v => v?.path), {}] + } +} diff --git a/src/app/components/Header.ts b/src/app/components/Header.ts index c6aff938..9a152ef3 100644 --- a/src/app/components/Header.ts +++ b/src/app/components/Header.ts @@ -17,6 +17,11 @@ export const Header = (view: View, title: string, homeLink = '/', panelToggleVis