Skip to content

Commit

Permalink
generic function attempt failure
Browse files Browse the repository at this point in the history
  • Loading branch information
toyhammered committed Jul 6, 2021
1 parent 94ed63f commit 01fe0a6
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 13 deletions.
7 changes: 5 additions & 2 deletions src/components/anime/AnimeEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ import ListEditor from '../ui/ListEditor';
import MediaCharacterEdit from '../mediaCharacter/MediaCharacterEdit';
import { ReducerAction } from 'src/types/reducer';
import { MediaChange } from 'src/types/mediaChange';
import { AnimeChangeEditInterface } from 'src/types/listEditorTypes';
import {
AnimeChangeEditInterface,
MediaCharacterChangeEditInterface,
} from 'src/types/listEditorTypes';

// interface AnimeInterface {
// record: FindAnimeFieldsFragment;
Expand Down Expand Up @@ -166,7 +169,7 @@ export default function AnimeEdit({
</>
</EditGroup>

<ListEditor
<ListEditor<MediaCharacterChangeEditInterface>
Component={MediaCharacterEdit}
initialItems={original.characters.nodes}
cache={cache.mediaCharacters}
Expand Down
18 changes: 9 additions & 9 deletions src/components/ui/ListEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,26 @@ import React, { ReactElement, useState } from 'react';
import { Maybe } from 'src/types/graphql';
import { ModelEditUnion } from 'src/types/listEditorTypes';

interface Props {
Component: React.ComponentType<ModelEditUnion>;
initialItems?: Maybe<ReadonlyArray<Maybe<ModelEditUnion['record']>>>;
cache: Array<ModelEditUnion['cache']>;
parentDispatch: ModelEditUnion['dispatch'];
interface Props<T extends ModelEditUnion> {
Component: React.ComponentType<T>;
initialItems?: Maybe<ReadonlyArray<Maybe<T['record']>>>;
cache: Array<T['cache']>;
parentDispatch: T['dispatch'];
}

export default function ListEditor({
export default function ListEditor<T extends ModelEditUnion>({
Component,
initialItems,
cache,
parentDispatch,
}: Props): ReactElement {
const mutableItems = (initialItems || []) as ModelEditUnion['record'][];
}: Props<T>): ReactElement {
const mutableItems = (initialItems || []) as T['record'][];
const [items, setItems] = useState(mutableItems);

const addItem = () => (event: React.MouseEvent<HTMLButtonElement>) => {
event.preventDefault();

const newItem = {} as ModelEditUnion['record'];
const newItem = {} as T['record'];
setItems([...items, newItem]);
};

Expand Down
4 changes: 2 additions & 2 deletions src/types/listEditorTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { ReducerAction } from './reducer';
export type ModelFragmentTypes = FindAnimeFieldsFragment | FindMediaCharacterFieldsFragment;
export type ModelCacheType = MediaChange | MediaCharacterChange;

export type ModelEditUnion = MediaCharacterChangeEditInterface;
// export type ModelEditUnion = MediaCharacterChangeEditInterface;
// NOTE: how to make this work?
// export type ModelEditUnion = MediaCharacterChangeEditInterface | AnimeChangeEditInterface;
export type ModelEditUnion = MediaCharacterChangeEditInterface | AnimeChangeEditInterface;

export interface ModelEditInterface {
record: ModelFragmentTypes;
Expand Down
4 changes: 4 additions & 0 deletions src/util/reducerState/mediaCharacterState.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// import { cloneDeep, merge } from 'lodash';
// import { ReducerPayload } from 'src/types/reducer';

// export default function mediaCharacterState() {}

0 comments on commit 01fe0a6

Please sign in to comment.