yearAndMonthFoundation.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import BaseFoundation, { DefaultAdapter } from '../base/foundation';
  2. import { PresetPosition } from './foundation';
  3. export interface YearAndMonthFoundationProps {
  4. currentYear?: number;
  5. currentMonth?: number;
  6. onSelect?: (obj: { currentMonth: number; currentYear: number }) => void;
  7. onBackToMain?: () => void;
  8. locale?: any;
  9. localeCode?: string;
  10. monthCycled?: boolean;
  11. yearCycled?: boolean;
  12. noBackBtn?: boolean;
  13. disabledDate?: (date: Date) => boolean;
  14. density?: string;
  15. presetPosition?: PresetPosition;
  16. renderQuickControls?: React.ReactNode;
  17. renderDateInput?: React.ReactNode;
  18. }
  19. export interface YearAndMonthFoundationState {
  20. years: Array<{ value: number; year: number }>;
  21. months: Array<{ value: number; month: number }>;
  22. currentYear: number;
  23. currentMonth: number;
  24. }
  25. export interface YearAndMonthAdapter extends DefaultAdapter<YearAndMonthFoundationProps, YearAndMonthFoundationState> {
  26. setCurrentYear: (currentYear: number) => void;
  27. setCurrentMonth: (currentMonth: number) => void;
  28. notifySelectYear: (year: number) => void;
  29. notifySelectMonth: (month: number) => void;
  30. notifyBackToMain: () => void;
  31. }
  32. export interface MonthScrollItem {
  33. [k: string]: any;
  34. month: number;
  35. value: string;
  36. disabled: boolean;
  37. }
  38. export interface YearScrollItem {
  39. [k: string]: any;
  40. year: number;
  41. value: number;
  42. disabled: boolean;
  43. }
  44. export default class YearAndMonthFoundation extends BaseFoundation<YearAndMonthAdapter> {
  45. constructor(adapter: YearAndMonthAdapter) {
  46. super({ ...adapter });
  47. }
  48. // eslint-disable-next-line @typescript-eslint/no-empty-function
  49. init() {}
  50. // eslint-disable-next-line @typescript-eslint/no-empty-function
  51. destroy() {}
  52. selectYear(item: YearScrollItem) {
  53. const year = item.value;
  54. this._adapter.setCurrentYear(year);
  55. this._adapter.notifySelectYear(year);
  56. }
  57. selectMonth(item: MonthScrollItem) {
  58. const { month } = item;
  59. this._adapter.setCurrentMonth(month);
  60. this._adapter.notifySelectMonth(month);
  61. }
  62. backToMain() {
  63. this._adapter.notifyBackToMain();
  64. }
  65. }