From 8aae27bb875dc8b1bb593f16e89b55852171898b Mon Sep 17 00:00:00 2001 From: seb Date: Tue, 22 Sep 2026 08:45:14 +0200 Subject: [PATCH] u --- src/api/StorageManager.js | 17 +++++++++++++++++ src/automats/posterminalAutomat.js | 2 +- src/components/CompanySettingsDialog.jsx | 20 ++++++++++++++------ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/api/StorageManager.js b/src/api/StorageManager.js index 36e5625..6454e40 100644 --- a/src/api/StorageManager.js +++ b/src/api/StorageManager.js @@ -8,6 +8,7 @@ import brandAutomat from '../automats/brandAutomat'; import unitAutomat from '../automats/unitAutomat'; import authAutomat from '../automats/authAutomat'; import categoryAutomat from '../automats/categoryAutomat'; +import posterminalAutomat from '../automats/posterminalAutomat'; /** @@ -458,6 +459,22 @@ export class StorageManager extends ApiClient { /** Reload units from API. */ updateUnit: { value: () => unitAutomat.actions.load() }, + /** Posterminal list from posterminalAutomat. */ + posterminals: { get: () => posterminalAutomat.state.terminals }, + /** Promise that resolves when posterminals are first loaded. */ + posterminalPromise: { + get: () => posterminalAutomat.state.status === 'succeeded' + ? Promise.resolve(posterminalAutomat.state.terminals) + : new Promise((resolve, reject) => { + const unsub = posterminalAutomat.subscribe((s) => { + if (s.status === 'succeeded') { unsub(); resolve(s.terminals); } + else if (s.status === 'failed') { unsub(); reject(new Error(s.error)); } + }); + }), + }, + /** Reload posterminals from API. */ + updatePosterminal: { value: () => posterminalAutomat.actions.load() }, + /** * Current company object from companyAutomat, or null. * Previously: companies array from GET /api/company. diff --git a/src/automats/posterminalAutomat.js b/src/automats/posterminalAutomat.js index 6395c10..bdd45dc 100644 --- a/src/automats/posterminalAutomat.js +++ b/src/automats/posterminalAutomat.js @@ -24,7 +24,7 @@ let posterminalAutomat; const actions = { /** Load all posterminals for the selected company. */ async load() { - const companyId = companyAutomat.state.current?.id; + const companyId = authAutomat.state.user?.selectedCompanyId ?? companyAutomat.state.current?.id; if (!companyId) return []; posterminalAutomat.setState({ status: 'loading', error: null }); try { diff --git a/src/components/CompanySettingsDialog.jsx b/src/components/CompanySettingsDialog.jsx index 2b17fd8..4be9f10 100644 --- a/src/components/CompanySettingsDialog.jsx +++ b/src/components/CompanySettingsDialog.jsx @@ -56,6 +56,14 @@ export default class CompanySettingsDialog extends Component { this.loadTerminals = this.loadTerminals.bind(this); } + componentDidMount() { + if (this.props.open) { + this.setState({ error: null }); + void this.loadCompany(); + void this.loadTerminals(); + } + } + componentDidUpdate(prevProps) { const { open } = this.props; if (open && !prevProps.open) { @@ -78,9 +86,9 @@ export default class CompanySettingsDialog extends Component { try { const session = await this.context.authMePromise; const companyId = requireDefined(session.user?.selectedCompanyId, 'selectedCompanyId'); - const companies = await this.context.companyPromise; + const companyData = await this.context.companyPromise; const companyRow = requireDefined( - companies.find((c) => c.id === companyId), + Array.isArray(companyData) ? companyData.find((c) => c.id === companyId) : companyData, 'company', ); this.syncFormFromCompany(companyRow); @@ -92,7 +100,7 @@ export default class CompanySettingsDialog extends Component { async loadTerminals() { try { const terminals = await this.context.posterminalPromise; - this.setState({ terminals }); + this.setState({ terminals: Array.isArray(terminals) ? terminals : [] }); } catch (err) { notifyError(err); } @@ -115,7 +123,7 @@ export default class CompanySettingsDialog extends Component { } const terminals = await this.context.updatePosterminal(); - this.setState({ newTerminalName: '', terminals }); + this.setState({ newTerminalName: '', terminals: Array.isArray(terminals) ? terminals : [] }); } catch (err) { notifyError(err); } finally { @@ -127,7 +135,7 @@ export default class CompanySettingsDialog extends Component { try { await this.context.posterminal.delete(terminal.id); const terminals = await this.context.updatePosterminal(); - this.setState({ terminals }); + this.setState({ terminals: Array.isArray(terminals) ? terminals : [] }); } catch (err) { notifyError(err); } @@ -266,7 +274,7 @@ export default class CompanySettingsDialog extends Component { - {this.state.terminals.map((terminal) => ( + {(this.state.terminals || []).map((terminal) => (