{"version":3,"sources":["lib/appContext/historyHelper.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,iDAAiD,CAAC;AAOvE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB","file":"../../../lib/appContext/historyHelper.d.ts","sourcesContent":["import AppContext, { getTools } from '../../common/appContext/appContext.js';\nimport { aliasName as loggerAlias, Logger } from '../../common/appContext/logging.js';\nimport { SharedState } from '../../common/appContext/sharedState.js';\n\nexport const stateKey = 'little-elements/lib/appContext/historyHelper';\n\ninterface Tools {\n  log: Logger;\n  state: SharedState;\n}\n\nexport interface HistoryState {\n  hashPath: string;\n}\n\nclass HistoryHelper {\n  public tools: Tools;\n\n  constructor(tools: Tools) {\n    this.tools = tools;\n  }\n\n  // TODO: i18n, etc\n  public popup(): Promise<Record<string, string>> { return null; }\n\n  // TODO: support Undo\n  public toaster(): Promise<Record<string, string>> { return null; }\n\n  /**\n   * Simple helper - for now just listens for\n   * hashchange events, and mirrors the hash\n   * to the shared state for state listeners to\n   * respond to.\n   */\n  public hashChangeListener = () => {\n    let hashPath = globalThis.location.hash;\n    if (hashPath) {\n      hashPath = hashPath.slice(1);\n    }\n    this.tools.state.changeState(\n      stateKey,\n      () => ({ hashPath } as HistoryState),\n    );\n  };\n\n  static get providerName() {\n    return 'driver/littleware/little-elements/lib/appContext/historyHelper';\n  }\n}\n\nAppContext.get().then(\n  (cx) => {\n    cx.onStart({ logger: loggerAlias, state: SharedState.providerName },\n      async (toolBox) => {\n        const tools: Tools = await getTools(toolBox) as Tools;\n        const helper = new HistoryHelper(tools);\n        window.addEventListener('hashchange', helper.hashChangeListener);\n        helper.hashChangeListener(); // initial state\n      });\n  },\n);\n"]}