Skip to content

Commit 4eb4f4c

Browse files
authored
Merge pull request #8815 from IAmVisco/add-utility-generics
Add some utility generics for better typings
2 parents 4a5f24e + 15586b4 commit 4eb4f4c

5 files changed

Lines changed: 16 additions & 10 deletions

File tree

packages/ra-core/src/core/ResourceDefinitionContext.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import * as React from 'react';
22
import { createContext, useCallback, useState, useMemo } from 'react';
33
import isEqual from 'lodash/isEqual';
44

5-
import { ResourceDefinition } from '../types';
5+
import { ResourceDefinition, ResourceOptions } from '../types';
66

7-
export type ResourceDefinitions = {
8-
[name: string]: ResourceDefinition;
7+
export type ResourceDefinitions<OptionsType extends ResourceOptions = any> = {
8+
[name: string]: ResourceDefinition<OptionsType>;
99
};
1010

1111
export type ResourceDefinitionContextValue = {

packages/ra-core/src/core/useResourceDefinition.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import defaults from 'lodash/defaults';
33

44
import { useResourceDefinitions } from './useResourceDefinitions';
55
import { useResourceContext } from './useResourceContext';
6-
import { ResourceDefinition } from '../types';
6+
import { ResourceDefinition, ResourceOptions } from '../types';
77

88
/**
99
* Hook to get the definition of a given resource
@@ -26,9 +26,11 @@ import { ResourceDefinition } from '../types';
2626
*
2727
* const definition = useResourceDefinition({ resource: 'posts' });
2828
*/
29-
export const useResourceDefinition = (
29+
export const useResourceDefinition = <
30+
OptionsType extends ResourceOptions = any
31+
>(
3032
props?: UseResourceDefinitionOptions
31-
): ResourceDefinition => {
33+
): ResourceDefinition<OptionsType> => {
3234
const resource = useResourceContext(props);
3335
const resourceDefinitions = useResourceDefinitions();
3436
const { hasCreate, hasEdit, hasList, hasShow, recordRepresentation } =

packages/ra-core/src/core/useResourceDefinitions.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ import { useResourceDefinitionContext } from './useResourceDefinitionContext';
1919
* // recordRepresentation: 'title',
2020
* // }
2121
*/
22-
export const useResourceDefinitions = (): ResourceDefinitions =>
22+
export const useResourceDefinitions = <
23+
OptionsType = any
24+
>(): ResourceDefinitions<OptionsType> =>
2325
useResourceDefinitionContext().definitions;

packages/ra-core/src/form/useInput.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ const defaultFormat = (value: any) => (value == null ? '' : value);
2323
// parse empty string into null as it's more suitable for a majority of backends
2424
const defaultParse = (value: string) => (value === '' ? null : value);
2525

26-
export const useInput = (props: InputProps): UseInputValue => {
26+
export const useInput = <ValueType = any>(
27+
props: InputProps<ValueType>
28+
): UseInputValue => {
2729
const {
2830
defaultValue,
2931
format = defaultFormat,

packages/ra-core/src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,9 @@ export type LegacyDataProvider = (
275275

276276
export type RecordToStringFunction = (record: any) => string;
277277

278-
export interface ResourceDefinition {
278+
export interface ResourceDefinition<OptionsType extends ResourceOptions = any> {
279279
readonly name: string;
280-
readonly options?: any;
280+
readonly options?: OptionsType;
281281
readonly hasList?: boolean;
282282
readonly hasEdit?: boolean;
283283
readonly hasShow?: boolean;

0 commit comments

Comments
 (0)