types.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. export type Report = {
  2. id: number;
  3. date: Date;
  4. approved: boolean;
  5. description: string;
  6. items: ReportItem[];
  7. amount: number;
  8. };
  9. export type NewReport = Pick<Report, 'date' | 'approved' | 'description' | 'items'>;
  10. export enum ReportItemType {
  11. food = 'Food',
  12. travel = 'Travel',
  13. training = 'Training',
  14. transport = 'Transport',
  15. officeSupplies = 'Office Supplies',
  16. unselected = ''
  17. }
  18. export type ReportItem = {
  19. description: string;
  20. amount: number;
  21. hasReceipt: boolean;
  22. type: ReportItemType;
  23. date: Date;
  24. };
  25. export interface Messenger {
  26. deliveryMessage(report: Report, user: string): void;
  27. }
  28. export const PS_REPORTS_KEY = 'ps-reports';
  29. type RemoteDataNotFetched = {
  30. kind: "notFetched";
  31. };
  32. type RemoteDataLoading = {
  33. kind: "loading";
  34. };
  35. type RemoteDataOK<T> = {
  36. kind: "ok";
  37. data: T;
  38. };
  39. type RemoteDataError = {
  40. kind: "error";
  41. error: string;
  42. };
  43. export type RemoteData<T> =
  44. RemoteDataNotFetched |
  45. RemoteDataLoading |
  46. RemoteDataOK<T> |
  47. RemoteDataError;
  48. export function isRemoteDataOK<T>(remoteData: RemoteData<T>): remoteData is RemoteDataOK<T> {
  49. return remoteData.kind === "ok";
  50. }
  51. export function isRemoteDataError<T>(remoteData: RemoteData<T>): remoteData is RemoteDataError {
  52. return remoteData.kind === "error";
  53. }
  54. export function isRemoteDataLoading<T>(remoteData: RemoteData<T>): remoteData is RemoteDataLoading {
  55. return remoteData.kind === "loading";
  56. }