yearAndMonthFoundation.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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?: any;
  17. renderDateInput?: any;
  18. yearAndMonthOpts?: any
  19. }
  20. export interface YearAndMonthFoundationState {
  21. years: Array<{ value: number; year: number }>;
  22. months: Array<{ value: number; month: number }>;
  23. currentYear: number;
  24. currentMonth: number
  25. }
  26. export interface YearAndMonthAdapter extends DefaultAdapter<YearAndMonthFoundationProps, YearAndMonthFoundationState> {
  27. setCurrentYear: (currentYear: number) => void;
  28. setCurrentMonth: (currentMonth: number) => void;
  29. notifySelectYear: (year: number) => void;
  30. notifySelectMonth: (month: number) => void;
  31. notifyBackToMain: () => void
  32. }
  33. export interface MonthScrollItem {
  34. [k: string]: any;
  35. month: number;
  36. value: string;
  37. disabled: boolean
  38. }
  39. export interface YearScrollItem {
  40. [k: string]: any;
  41. year: number;
  42. value: number;
  43. disabled: boolean
  44. }
  45. export default class YearAndMonthFoundation extends BaseFoundation<YearAndMonthAdapter> {
  46. constructor(adapter: YearAndMonthAdapter) {
  47. super({ ...adapter });
  48. }
  49. // eslint-disable-next-line @typescript-eslint/no-empty-function
  50. init() {}
  51. // eslint-disable-next-line @typescript-eslint/no-empty-function
  52. destroy() {}
  53. selectYear(item: YearScrollItem) {
  54. const year = item.value;
  55. this._adapter.setCurrentYear(year);
  56. this._adapter.notifySelectYear(year);
  57. }
  58. selectMonth(item: MonthScrollItem) {
  59. const { month } = item;
  60. this._adapter.setCurrentMonth(month);
  61. this._adapter.notifySelectMonth(month);
  62. }
  63. backToMain() {
  64. this._adapter.notifyBackToMain();
  65. }
  66. }