diff --git a/lib/types/nav-types.js b/lib/types/nav-types.js --- a/lib/types/nav-types.js +++ b/lib/types/nav-types.js @@ -1,7 +1,36 @@ // @flow +import t from 'tcomb'; +import type { TEnums } from 'tcomb'; + export type BaseNavInfo = { +startDate: string, +endDate: string, ... }; +export type WebNavigationTab = 'calendar' | 'chat' | 'settings'; +export const webNavigationTabValidator: TEnums = t.enums.of([ + 'calendar', + 'chat', + 'settings', +]); +export type WebLoginMethod = 'form' | 'qr-code'; +export const webLoginMethodValidator: TEnums = t.enums.of(['form', 'qr-code']); +export type WebNavigationSettingsSection = + | 'account' + | 'friend-list' + | 'block-list' + | 'keyservers' + | 'danger-zone'; +export const webNavigationSettingsSectionValidator: TEnums = t.enums.of([ + 'account', + 'friend-list', + 'block-list', + 'keyservers', + 'danger-zone', +]); +export type WebNavigationChatMode = 'view' | 'create'; +export const webNavigationChatModeValidator: TEnums = t.enums.of([ + 'view', + 'create', +]); diff --git a/web/app-list/app-list-item.react.js b/web/app-list/app-list-item.react.js --- a/web/app-list/app-list-item.react.js +++ b/web/app-list/app-list-item.react.js @@ -6,11 +6,11 @@ import SWMansionIcon, { type Icon, } from 'lib/components/SWMansionIcon.react.js'; +import type { WebNavigationTab } from 'lib/types/nav-types.js'; import css from './app-list-item.css'; import { useSelector } from '../redux/redux-utils.js'; import { navTabSelector } from '../selectors/nav-selectors.js'; -import type { WebNavigationTab } from '../types/nav-types.js'; type Props = { +id: WebNavigationTab, diff --git a/web/selectors/nav-selectors.js b/web/selectors/nav-selectors.js --- a/web/selectors/nav-selectors.js +++ b/web/selectors/nav-selectors.js @@ -7,12 +7,12 @@ import { currentCalendarQuery } from 'lib/selectors/nav-selectors.js'; import type { CalendarQuery } from 'lib/types/entry-types.js'; import type { CalendarFilter } from 'lib/types/filter-types.js'; +import type { + WebNavigationSettingsSection, + WebNavigationTab, +} from 'lib/types/nav-types.js'; import type { AppState } from '../redux/redux-setup.js'; -import { - type WebNavigationTab, - type WebNavigationSettingsSection, -} from '../types/nav-types.js'; const dateExtractionRegex = /^([0-9]{4})-([0-9]{2})-[0-9]{2}$/; diff --git a/web/settings/user-settings-list-item.react.js b/web/settings/user-settings-list-item.react.js --- a/web/settings/user-settings-list-item.react.js +++ b/web/settings/user-settings-list-item.react.js @@ -3,10 +3,11 @@ import classNames from 'classnames'; import * as React from 'react'; +import type { WebNavigationSettingsSection } from 'lib/types/nav-types.js'; + import css from './user-settings-list-item.css'; import { useSelector } from '../redux/redux-utils.js'; import { navSettingsSectionSelector } from '../selectors/nav-selectors.js'; -import type { WebNavigationSettingsSection } from '../types/nav-types.js'; type Props = { +id: WebNavigationSettingsSection, diff --git a/web/sidebar/community-drawer-item-community-handlers.react.js b/web/sidebar/community-drawer-item-community-handlers.react.js --- a/web/sidebar/community-drawer-item-community-handlers.react.js +++ b/web/sidebar/community-drawer-item-community-handlers.react.js @@ -8,6 +8,7 @@ updateChatCommunityFilter, } from 'lib/actions/community-actions.js'; import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; +import type { WebNavigationTab } from 'lib/types/nav-types.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; import type { CommunityDrawerItemCommunityHandler } from './community-drawer-item-handler.react.js'; @@ -17,7 +18,6 @@ useOnClickThread, useThreadIsActive, } from '../selectors/thread-selectors.js'; -import type { WebNavigationTab } from '../types/nav-types.js'; export type HandlerProps = { +setHandler: (handler: CommunityDrawerItemCommunityHandler) => void, diff --git a/web/sidebar/community-drawer-item-handlers.react.js b/web/sidebar/community-drawer-item-handlers.react.js --- a/web/sidebar/community-drawer-item-handlers.react.js +++ b/web/sidebar/community-drawer-item-handlers.react.js @@ -3,6 +3,7 @@ import * as React from 'react'; import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; +import type { WebNavigationTab } from 'lib/types/nav-types.js'; import type { CommunityDrawerItemHandler } from './community-drawer-item-handler.react.js'; import { useCommunityIsPickedCalendar } from '../selectors/calendar-selectors.js'; @@ -10,7 +11,6 @@ useOnClickThread, useThreadIsActive, } from '../selectors/thread-selectors.js'; -import type { WebNavigationTab } from '../types/nav-types.js'; export type HandlerProps = { +setHandler: (handler: CommunityDrawerItemHandler) => void, diff --git a/web/sidebar/community-drawer-item.react.js b/web/sidebar/community-drawer-item.react.js --- a/web/sidebar/community-drawer-item.react.js +++ b/web/sidebar/community-drawer-item.react.js @@ -3,6 +3,7 @@ import classnames from 'classnames'; import * as React from 'react'; +import type { WebNavigationTab } from 'lib/types/nav-types.js'; import type { CommunityDrawerItemData } from 'lib/utils/drawer-utils.react.js'; import { useResolvedThreadInfo } from 'lib/utils/entity-helpers.js'; @@ -15,7 +16,6 @@ getExpandButton, } from './community-drawer-utils.react.js'; import ThreadAvatar from '../avatars/thread-avatar.react.js'; -import type { WebNavigationTab } from '../types/nav-types.js'; export type DrawerItemProps = { +itemData: CommunityDrawerItemData, diff --git a/web/sidebar/community-drawer-utils.react.js b/web/sidebar/community-drawer-utils.react.js --- a/web/sidebar/community-drawer-utils.react.js +++ b/web/sidebar/community-drawer-utils.react.js @@ -3,13 +3,13 @@ import * as React from 'react'; import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; +import type { WebNavigationTab } from 'lib/types/nav-types.js'; import type { CommunityDrawerItemData } from 'lib/utils/drawer-utils.react'; import css from './community-drawer-item.css'; import CommunityDrawerItemChat from './community-drawer-item.react.js'; import { ExpandButton } from './expand-buttons.react.js'; import SubchannelsButton from './subchannels-button.react.js'; -import type { WebNavigationTab } from '../types/nav-types.js'; const indentation = 14; const subchannelsButtonIndentation = 24; diff --git a/web/types/nav-types.js b/web/types/nav-types.js --- a/web/types/nav-types.js +++ b/web/types/nav-types.js @@ -5,35 +5,23 @@ import { threadInfoValidator } from 'lib/permissions/minimally-encoded-thread-permissions-validators.js'; import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; -import { type BaseNavInfo } from 'lib/types/nav-types.js'; +import { + type BaseNavInfo, + type WebLoginMethod, + type WebNavigationChatMode, + type WebNavigationSettingsSection, + type WebNavigationTab, + webLoginMethodValidator, + webNavigationChatModeValidator, + webNavigationSettingsSectionValidator, + webNavigationTabValidator, +} from 'lib/types/nav-types.js'; import { type AccountUserInfo, accountUserInfoValidator, } from 'lib/types/user-types.js'; import { tID, tShape } from 'lib/utils/validation-utils.js'; -export type WebNavigationTab = 'calendar' | 'chat' | 'settings'; -const webNavigationTabValidator = t.enums.of(['calendar', 'chat', 'settings']); -export type WebLoginMethod = 'form' | 'qr-code'; -const webLoginMethodValidator = t.enums.of(['form', 'qr-code']); - -export type WebNavigationSettingsSection = - | 'account' - | 'friend-list' - | 'block-list' - | 'keyservers' - | 'danger-zone'; -const webNavigationSettingsSectionValidator = t.enums.of([ - 'account', - 'friend-list', - 'block-list', - 'keyservers', - 'danger-zone', -]); - -export type WebNavigationChatMode = 'view' | 'create'; -const webNavigationChatModeValidator = t.enums.of(['view', 'create']); - export type WebNavInfo = { ...$Exact, +tab: WebNavigationTab,