42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
/**
|
|
* @file numberAutomat.js
|
|
* @description Manages cached document numbering sequences (`GET /api/number`)
|
|
* (e.g. delivery, entity) for the active company. Built via `createListAutomat`.
|
|
*
|
|
* Upstream Triggers:
|
|
* - `authAutomat`: Via `createListAutomat` — triggers `load()` on `'authed'` with
|
|
* a `selectedCompanyId`, and `reset()` on `'anon'`.
|
|
* - UI / Routes: Manual calls to `load()` or `reload()`.
|
|
*/
|
|
|
|
import { number as numberApi } from '../api';
|
|
import { createListAutomat } from './createListAutomat';
|
|
|
|
/**
|
|
* @typedef {Object} NumberSequence
|
|
* @property {string|number} id Sequence id.
|
|
* @property {string} type Document type key (e.g. `delivery`, `entity`).
|
|
* @property {string} prefix Prefix rendered before the counter.
|
|
* @property {number} padding Zero-padding width.
|
|
* @property {number} next Next counter value.
|
|
*/
|
|
|
|
/**
|
|
* Company document number sequences (`GET /api/number`).
|
|
*
|
|
* @type {import('react-automat').Automat<import('./createListAutomat').ListAutomatState>}
|
|
*/
|
|
export const numberAutomat = createListAutomat({
|
|
name: 'number',
|
|
fetch: async () => {
|
|
const data = await numberApi.list();
|
|
return data.numbers ?? [];
|
|
},
|
|
sort: (items) =>
|
|
[...items].sort((a, b) =>
|
|
String(a.type ?? '').localeCompare(String(b.type ?? ''), 'de'),
|
|
),
|
|
});
|
|
|
|
export default numberAutomat;
|