// Copyright 2017-2025 @pezkuwi/react-components authors & contributors // SPDX-License-Identifier: Apache-2.0 // TODO: We have a lot shared between this and InputExtrinsic import type { QueryableStorageEntry } from '@pezkuwi/api/types'; import type { DropdownOptions } from '../util/types.js'; import React, { useCallback, useState } from 'react'; import { useApi } from '@pezkuwi/react-hooks'; import LinkedWrapper from '../InputExtrinsic/LinkedWrapper.js'; import { keyOptions, sectionOptions } from './options/index.js'; import SelectKey from './SelectKey.js'; import SelectSection from './SelectSection.js'; interface Props { className?: string; defaultValue: QueryableStorageEntry<'promise'>; isError?: boolean; label: React.ReactNode; onChange?: (value: QueryableStorageEntry<'promise'>) => void; withLabel?: boolean; } function InputStorage ({ className = '', defaultValue, label, onChange, withLabel }: Props): React.ReactElement { const { api } = useApi(); const [optionsMethod, setOptionsMethod] = useState(() => keyOptions(api, defaultValue.creator.section)); const [optionsSection] = useState(() => sectionOptions(api)); const [value, setValue] = useState>(() => defaultValue); const _onKeyChange = useCallback( (newValue: QueryableStorageEntry<'promise'>): void => { if (value !== newValue) { // set via callback setValue(() => newValue); onChange && onChange(newValue); } }, [onChange, value] ); const _onSectionChange = useCallback( (section: string): void => { if (section !== value.creator.section) { const optionsMethod = keyOptions(api, section); setOptionsMethod(optionsMethod); _onKeyChange(api.query[section][optionsMethod[0].value]); } }, [_onKeyChange, api, value] ); return ( ); } export default React.memo(InputStorage);