import {Trans} from '@common/i18n/trans'; import {Item} from '@common/ui/forms/listbox/item'; import {FormSelect} from '@common/ui/forms/select/select'; import React, {Fragment, useState} from 'react'; import {GENRE_MODEL} from '@app/titles/models/genre'; import {KEYWORD_MODEL} from '@app/titles/models/keyword'; import {PRODUCTION_COUNTRY_MODEL} from '@app/titles/models/production-country'; import {useValueLists} from '@common/http/value-lists'; import {message} from '@common/i18n/message'; import {useTrans} from '@common/i18n/use-trans'; import {useFormContext} from 'react-hook-form'; import {UpdateChannelPayload} from '@common/admin/channels/requests/use-update-channel'; import {MOVIE_MODEL, SERIES_MODEL, TITLE_MODEL} from '@app/titles/models/title'; import {InfoDialogTrigger} from '@common/ui/overlays/dialog/info-dialog-trigger/info-dialog-trigger'; import clsx from 'clsx'; import {ChannelsDocsLink} from '@common/admin/channels/channels-docs-link'; const supportedModels = [TITLE_MODEL, MOVIE_MODEL, SERIES_MODEL]; const restrictions = { [GENRE_MODEL]: message('Genre'), [KEYWORD_MODEL]: message('Keyword'), [PRODUCTION_COUNTRY_MODEL]: message('Production country'), }; interface Props { className?: string; } export function ChannelRestrictionField({className}: Props) { const {setValue} = useFormContext(); const {watch} = useFormContext(); if (!supportedModels.includes(watch('config.contentModel'))) { return null; } return (
} onSelectionChange={() => { setValue('config.restrictionModelId', 'urlParam'); }} > {Object.entries(restrictions).map(([value, label]) => ( ))}
); } function RestrictionModelField() { const {trans} = useTrans(); const [searchValue, setSearchValue] = useState(''); const {watch} = useFormContext(); const {data} = useValueLists(['genres', 'productionCountries'], { type: watch('config.autoUpdateProvider'), }); const selectedRestriction = watch( 'config.restriction', ) as keyof typeof restrictions; const selectedKeywordId = watch('config.restrictionModelId'); const keywordQuery = useValueLists(['keywords'], { searchQuery: searchValue, selectedValue: selectedKeywordId, type: watch('config.autoUpdateProvider'), }); if (!selectedRestriction) return null; const options = { [GENRE_MODEL]: data?.genres, [KEYWORD_MODEL]: keywordQuery.data?.keywords, [PRODUCTION_COUNTRY_MODEL]: data?.productionCountries, }; const restrictionLabel = restrictions[selectedRestriction]; // allow setting keyword to custom value, because there are too many keywords // to put into autocomplete, ideally it would use async search from backend though return ( } > {options[selectedRestriction]?.map(option => ( ))} ); } function InfoTrigger() { return ( } /> ); }