All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ducks.pages.selectors.ts Maven / Gradle / Ivy

The newest version!
import { createSelector } from '@reduxjs/toolkit'

import { State } from '../State'
import { EMPTY_OBJECT } from '../../utils/emptyTypes'

/*
 Базовые селекторы
 */

/**
 * Базовый селектор всех страниц
 * @param { GlobalState } state
 * @return TPageState
 */
export const pagesSelector = (state: State) => state.pages || EMPTY_OBJECT

/*
 Селекторы генераторы
 */

/**
 * Селектор-генератор для получения страницы по ID
 */
export const makePageByIdSelector = (pageId: string) => createSelector(
    [
        pagesSelector,
    ],
    pagesState => pagesState[pageId],
)

/**
 * Селектор-генератор для получения статуса загрузки по ID
 * @param {string} pageId
 * @return {boolean | undefined}
 */
export const makePageLoadingByIdSelector = (pageId: string) => createSelector(
    makePageByIdSelector(pageId),
    pageState => pageState?.loading,
)

/**
 * Селектор-генератор для получения статуса ошибки по ID
 * @param {string} pageId
 * @return {boolean | undefined}
 */
export const makePageErrorByIdSelector = (pageId: string) => createSelector(
    makePageByIdSelector(pageId),
    pageState => pageState?.error,
)

/**
 *  Получение свойства disabled страницы по ее id
 * @param {string} pageId
 * @return {boolean | undefined}
 */
export const makePageDisabledByIdSelector = (pageId: string) => createSelector(
    makePageByIdSelector(pageId),
    pageState => pageState?.disabled,
)

/**
 * Получение свойсва status страницы по ee d
 * @param {string} pageId
 * @return {number | undefined}
 */
export const makePageStatusByIdSelected = (pageId: string) => createSelector(
    makePageByIdSelector(pageId),
    pageState => pageState?.status,
)

/**
 * Селектор-генератор для получения метеданных страницы по ID
 * @param {string} pageId
 * @return {Object. | undefined}
 */
export const makePageMetadataByIdSelector = (pageId: string) => createSelector(
    makePageByIdSelector(pageId),
    pageState => pageState?.metadata,
)

/**
 * Селектор-генератор для получения метеданных страницы по ID
 * @param {string} pageId
 * @return {Object. | undefined}
 */
export const makePageUrlByIdSelector = (pageId: string) => createSelector(
    makePageByIdSelector(pageId),
    pageState => pageState?.pageUrl,
)

/**
 * Селектор-генератор для получения статуса загрузки по ID
 * @param {string} pageId
 * @return {Object. | undefined}
 */
export const makePageRoutesByIdSelector = (pageId: string) => createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => pageState?.routes,
)

/**
 * Селектро toolbar из metadata по id
 * @param {string} pageId
 * @return {Object. | undefined}
 */
export const makePageToolbarByIdSelector = (pageId: string) => createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => pageState?.toolbar,
)

/**
 * Селектро title из metadata по id
 * @param {string} pageId
 * @return {string | undefined}
 */
export const makePageTitleByIdSelector = (pageId: string) => createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => pageState?.page?.title,
)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy