@airporting/integrations-app 0.4.167 → 0.4.169

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ import type { WorksheetService } from '@/src/components/synchro/worksheetFields.types.ts';
2
+ export type SynchroWorksheet = {
3
+ sheetId: number;
4
+ title: string;
5
+ index: number;
6
+ hidden: boolean;
7
+ };
8
+ export type SynchroWorksheetsResponse = {
9
+ spreadsheetId: string;
10
+ title: string;
11
+ worksheets: SynchroWorksheet[];
12
+ };
13
+ /**
14
+ * Les onglets d'un tableur, lus en direct (app-api
15
+ * `GET /v1/synchro/spreadsheets/:id/worksheets`) : par le compte de service
16
+ * Google, ou par l'application Airporting cote Graph quand le tableur est un
17
+ * fichier Excel (`service=excel` ; sans le parametre, l'API detecte elle-meme
18
+ * les identifiants de fichiers Excel enregistres). Cache tres court : un
19
+ * onglet renomme doit apparaitre a la prochaine ouverture de la liste.
20
+ */
21
+ export declare function useWorksheetsQuery(spreadsheetId: string | null, service?: WorksheetService): import("@tanstack/react-query").UseQueryResult<SynchroWorksheetsResponse, Error>;
@@ -0,0 +1,27 @@
1
+ import type { CompanyDestination } from '@/src/api/synchro/types.ts';
2
+ import type { WorksheetService } from '@/src/components/synchro/worksheetFields.types.ts';
3
+ type Props = {
4
+ label?: string | null;
5
+ help?: string | null;
6
+ required?: boolean;
7
+ disabled?: boolean;
8
+ value: unknown;
9
+ onChange: (value: string) => void;
10
+ error?: string;
11
+ /** Identifiant du tableur choisi dans le champ voisin ; null tant qu'il ne l'est pas. */
12
+ spreadsheetId: string | null;
13
+ /** Service qui heberge le tableur ; `gsheet` par defaut. */
14
+ service?: WorksheetService;
15
+ /** Autres jobs qui ecrivent deja l'onglet saisi sur ce tableur. */
16
+ collisions?: CompanyDestination[] | null;
17
+ };
18
+ /**
19
+ * Selecteur d'onglet d'un tableur : la liste vient du tableur choisi a cote,
20
+ * en direct (relue a chaque ouverture et au retour sur la fenetre). Marche
21
+ * pour un tableur Google comme pour un fichier Excel, le service etant deduit
22
+ * du champ voisin par le formulaire.
23
+ * Sans tableur lisible, on retombe en saisie libre avec la raison : la valeur
24
+ * enregistree n'est jamais perdue, meme si l'onglet a ete renomme.
25
+ */
26
+ export declare function InputWorksheetSelector({ label, help, required, disabled, value, onChange, error, spreadsheetId, service, collisions, }: Props): import("react/jsx-runtime").JSX.Element;
27
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { CompanyDestination } from '@/src/api/synchro/types.ts';
2
+ type Props = {
3
+ /** Autres jobs de la societe qui ecrivent deja cet onglet de ce tableur. */
4
+ collisions?: CompanyDestination[] | null;
5
+ };
6
+ /**
7
+ * Avertissement en ligne sous un champ d'onglet : un autre job ecrit deja
8
+ * dans cet onglet du meme tableur, les deux synchros s'ecraseraient. Rendu
9
+ * sous la saisie libre comme sous le selecteur, tableur Google ou Excel.
10
+ */
11
+ export declare function WorksheetCollisionAlert({ collisions }: Props): import("react/jsx-runtime").JSX.Element | null;
12
+ export {};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Minute proposée par défaut pour une nouvelle planification.
3
+ *
4
+ * Le formulaire proposait `0`, et personne ne le changeait : au 29/08/2026,
5
+ * 220 planifications actives sur 371 tombaient à la minute zéro, dont 67 à
6
+ * 01:00 et 60 à 22:00. Toutes ces synchros démarrent donc en même temps, et la
7
+ * file met d'autant plus de temps à s'écouler que le pic est concentré. Mesuré
8
+ * la nuit du 28 au 29/08 : jusqu'à 117 min d'attente moyenne dans la fenêtre de
9
+ * reprise, contre moins d'une minute une fois le pic absorbé.
10
+ *
11
+ * La minute est déduite de l'identifiant du client plutôt que tirée au hasard,
12
+ * pour trois raisons : elle est stable dans le temps, donc le client ne voit pas
13
+ * son horaire bouger ; elle est rejouable, donc on peut vérifier l'état attendu
14
+ * sans stocker de graine ; et le facteur 7, premier avec 60, éloigne les
15
+ * identifiants consécutifs au lieu de les coller (deux clients créés à la suite
16
+ * seraient voisins avec un simple modulo).
17
+ *
18
+ * L'heure n'est volontairement pas dérivée : la déplacer changerait la fenêtre
19
+ * de fraîcheur des données promise au client, alors que décaler la minute lui
20
+ * est indifférent.
21
+ */
22
+ export declare function defaultScheduleMinute(recipeCustomerId: number): number;
@@ -0,0 +1,23 @@
1
+ import type { WorksheetService } from '@/src/components/synchro/worksheetFields.types.ts';
2
+ export declare const WORKSHEET_FIELD_NAMES: Set<string>;
3
+ export declare const SPREADSHEET_FIELD_NAMES: string[];
4
+ /**
5
+ * Nom du champ voisin de meme prefixe qui porte `suffix`, ou null quand le
6
+ * champ d'onglet ne suit pas la convention `*Sheet_Name` (ex. `Sheet_Name`,
7
+ * `Export_Sheet_Name`, `Import_Sheet_Name`). Renvoyer null plutot que le nom
8
+ * du champ lui-meme evite de lire le nom de l'onglet comme s'il etait un
9
+ * identifiant de tableur.
10
+ */
11
+ export declare function neighbourFieldName(name: string | null | undefined, suffix: string): string | null;
12
+ export declare function spreadsheetIdOf(values: Record<string, unknown>, key: string): string | null;
13
+ /**
14
+ * Le service du tableur d'un champ d'onglet, dans cet ordre :
15
+ *
16
+ * 1. le type de la question voisine `*Spreadsheet_Id` de meme prefixe
17
+ * (`excel_account_selector` = fichier Excel), sinon celui du premier champ
18
+ * tableur connu du formulaire ;
19
+ * 2. le champ cache `Worksheet_Type` (`Excel` contre `GoogleSheets`), teste
20
+ * d'abord sur le prefixe du champ d'onglet puis sur le nom nu ;
21
+ * 3. a defaut, un tableur Google : c'est le cas historique.
22
+ */
23
+ export declare function worksheetServiceOf(fieldTypes: Record<string, string>, values: Record<string, unknown>, name: string | null | undefined): WorksheetService;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Service qui heberge le tableur d'un champ d'onglet : un tableur Google
3
+ * (`gsheet`) ou un fichier Excel sur le SharePoint du client (`excel`). Le
4
+ * type de question reste `gsheets_worksheet_selector` dans les deux cas, pour
5
+ * ne pas casser les 33 formulaires Excel deja en base : c'est le front qui
6
+ * deduit le service et le passe a l'API.
7
+ */
8
+ export type WorksheetService = 'gsheet' | 'excel';
Binary file