mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-06 10:03:38 +00:00
Both apps wrote a cookie named `current-position-id` but stored different ids in it — freight the `employeePositionId`, Smart Office the `position.id`. On a shared domain each login overwrote the other's desk selection, and the loser silently fell back to the first position. Freight now uses `freight-current-position-id` through a small helper that reads the old name once, so a session live across the deploy keeps its desk, and clears it on every write. Also mounts the position switcher in the freight dashboard header. It only existed under /performance-management, so on every other page a two-desk user had no way to switch and was stuck on whatever `useAuthUser` defaulted to. It now hides below two positions rather than showing a one-option dropdown to the single-desk majority. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import Cookies from "js-cookie";
|
|
|
|
type CookieOptions = NonNullable<Parameters<typeof Cookies.set>[2]>;
|
|
|
|
/**
|
|
* Freight's own active-position cookie.
|
|
*
|
|
* Smart Office is a separate app on the same IAM and it also writes a cookie
|
|
* named `current-position-id` — but it stores `position.id` where freight
|
|
* stores `employeePositionId`. The two are not interchangeable, so on a shared
|
|
* domain each app's login silently overwrote the other's desk selection and the
|
|
* loser fell back to `positions[0]`. Freight keeps its own cookie name so both
|
|
* can hold a selection at once.
|
|
*/
|
|
export const POSITION_COOKIE = "freight-current-position-id";
|
|
|
|
/**
|
|
* The pre-rename, shared-with-Smart-Office name. Still read so a session that
|
|
* is live across the deploy keeps its desk, and cleared on every write so the
|
|
* colliding cookie does not linger.
|
|
*/
|
|
const LEGACY_POSITION_COOKIE = "current-position-id";
|
|
|
|
/** The active `employeePositionId`, or undefined when no desk is selected. */
|
|
export const getPositionCookie = (): string | undefined =>
|
|
Cookies.get(POSITION_COOKIE) ?? Cookies.get(LEGACY_POSITION_COOKIE);
|
|
|
|
export const setPositionCookie = (
|
|
value: string,
|
|
options?: CookieOptions,
|
|
): void => {
|
|
Cookies.set(POSITION_COOKIE, value, options);
|
|
Cookies.remove(LEGACY_POSITION_COOKIE);
|
|
};
|
|
|
|
export const clearPositionCookie = (): void => {
|
|
Cookies.remove(POSITION_COOKIE);
|
|
Cookies.remove(LEGACY_POSITION_COOKIE);
|
|
};
|