{"componentChunkName":"component---src-components-api-layout-js","path":"/api/react-enty/entity-api/","webpackCompilationHash":"","result":{"data":{"allFile":{"group":[{"fieldValue":"Enty","nodes":[{"childMdx":{"fields":{"slug":"api/enty/array-schema/"},"frontmatter":{"title":"Array Schema"},"headings":[{"value":"Params","depth":2},{"value":"shape","depth":3},{"value":"options.create","depth":3},{"value":"options.merge","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}},{"childMdx":{"fields":{"slug":"api/enty/composite-entity-schema/"},"frontmatter":{"title":"Composite Entity Schema"},"headings":[{"value":"Params","depth":2},{"value":"name","depth":3},{"value":"options.shape","depth":3},{"value":"options.compositeKeys","depth":3},{"value":"options.idAttribute","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}},{"childMdx":{"fields":{"slug":"api/enty/dynamic-schema/"},"frontmatter":{"title":"Dynamic Schema"},"headings":[{"value":"Params","depth":2},{"value":"shape","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3},{"value":"Examples","depth":2},{"value":"Non-homogeneous Array","depth":3},{"value":"Union Type","depth":3}]}},{"childMdx":{"fields":{"slug":"api/enty/entity-schema/"},"frontmatter":{"title":"Entity Schema"},"headings":[{"value":"Params","depth":2},{"value":"name","depth":3},{"value":"options.shape","depth":3},{"value":"options.idAttribute","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}},{"childMdx":{"fields":{"slug":"api/enty/id-schema/"},"frontmatter":{"title":"Id Schema"},"headings":[{"value":"Params","depth":2},{"value":"shape","depth":3},{"value":"options.create","depth":2},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}},{"childMdx":{"fields":{"slug":"api/enty/object-schema/"},"frontmatter":{"title":"Object Schema"},"headings":[{"value":"Params","depth":2},{"value":"shape","depth":3},{"value":"options.create","depth":3},{"value":"options.merge","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}},{"childMdx":{"fields":{"slug":"api/enty/value-schema/"},"frontmatter":{"title":"Value Schema"},"headings":[{"value":"Params","depth":2},{"value":"shape","depth":3},{"value":"options.shape","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}}]},{"fieldValue":"Enty Immutable","nodes":[{"childMdx":{"fields":{"slug":"api/enty-immutable/list-schema/"},"frontmatter":{"title":"List Schema"},"headings":[{"value":"Params","depth":2},{"value":"shape","depth":3},{"value":"options.shape","depth":3},{"value":"options.merge","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}},{"childMdx":{"fields":{"slug":"api/enty-immutable/map-schema/"},"frontmatter":{"title":"Map Schema"},"headings":[{"value":"Params","depth":2},{"value":"shape","depth":3},{"value":"Methods","depth":2},{"value":".normalize()","depth":3},{"value":".denormalize()","depth":3}]}}]},{"fieldValue":"React Enty","nodes":[{"childMdx":{"fields":{"slug":"api/react-enty/entity-api/"},"frontmatter":{"title":"Entity Api"},"headings":[{"value":"Params","depth":2},{"value":"actionMap","depth":3},{"value":"schema","depth":3},{"value":"Returns","depth":2},{"value":"useRequest","depth":3},{"value":"RequestHoc","depth":3},{"value":"Root Returns","depth":2},{"value":"Provider","depth":3},{"value":"ProviderHoc","depth":3},{"value":"useRemove","depth":3},{"value":"RemoveHoc","depth":3},{"value":"Examples","depth":2},{"value":"Combining Multiple Apis","depth":3}]}},{"childMdx":{"fields":{"slug":"api/react-enty/message/"},"frontmatter":{"title":"Message"},"headings":[{"value":"Properties","depth":2},{"value":".response","depth":3},{"value":".requestState","depth":3},{"value":".requestError","depth":3},{"value":"Methods","depth":2},{"value":".onRequest()","depth":3},{"value":".get()","depth":3},{"value":".getIn()","depth":3},{"value":".updateRequestState()","depth":3},{"value":".toEmpty()","depth":3},{"value":".toFetching()","depth":3},{"value":".toRefetching()","depth":3},{"value":".toSuccess()","depth":3},{"value":".toError()","depth":3},{"value":"Static Unit Functions","depth":2},{"value":"Message.empty()","depth":3},{"value":"Message.fetching()","depth":3},{"value":"Message.refetching()","depth":3},{"value":"Message.success()","depth":3},{"value":"Message.error()","depth":3}]}},{"childMdx":{"fields":{"slug":"api/react-enty/remove-hook/"},"frontmatter":{"title":"useRemove"},"headings":[{"value":"Examples","depth":2}]}},{"childMdx":{"fields":{"slug":"api/react-enty/request-hoc/"},"frontmatter":{"title":"RequestHoc"},"headings":[{"value":"Config","depth":2},{"value":".name","depth":3},{"value":".auto","depth":3},{"value":".payloadCreator","depth":3},{"value":".shouldComponentAutoRequest","depth":3},{"value":"Examples","depth":2},{"value":"Fetch On Load","depth":3},{"value":"Fetch On Prop Change","depth":3},{"value":"Fetch On Callback","depth":3},{"value":"Fetch Series","depth":3},{"value":"Fetch Parallel","depth":3}]}},{"childMdx":{"fields":{"slug":"api/react-enty/request-hook/"},"frontmatter":{"title":"useRequest"},"headings":[{"value":"Examples","depth":2},{"value":"Fetch On Load","depth":3},{"value":"Fetch On Prop Change","depth":3},{"value":"Fetch On Callback","depth":3},{"value":"Fetch Series","depth":3},{"value":"Fetch Parallel","depth":3}]}},{"childMdx":{"fields":{"slug":"api/react-enty/request-state/"},"frontmatter":{"title":"Request State"},"headings":[{"value":"Properties","depth":2},{"value":".is{State}","depth":3},{"value":"Methods","depth":2},{"value":".{state}Map()","depth":3},{"value":".{state}FlatMap()","depth":3},{"value":".to{state}()","depth":3},{"value":".value()","depth":3},{"value":"Unit Functions","depth":3},{"value":"Examples","depth":2},{"value":"ApplyLoader","depth":3},{"value":"Merging RequestStates","depth":3},{"value":"Any Success","depth":3}]}}]}]},"mdx":{"id":"510c6c3a-e7d9-59d1-bddc-3f3634018d38","body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"id\": \"EntityApi\",\n  \"title\": \"Entity Api\",\n  \"group\": \"React Enty\"\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The EntityApi provides a declarative way to turn a series of promise returning functions into hoc's\\nthat fetch your data.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"EntityApi(\\n    actionMap: {[key: string]: () => Promise<*>},\\n    schema?: Schema,\\n);\\n\")), mdx(\"h2\", null, \"Params\"), mdx(\"h3\", null, \"actionMap\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"type:\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{[key: string]: () => Promise<*>} \"), mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"returns:\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{[key: string]: {useRequest: RequestHook, entityProvider}}\")), mdx(\"p\", null, \"Action map is an aribtarily nested set of promise returning functions. Enty wraps these\\nfunctions into a \", \"[RequestHook]\", \" bound to the schema provided.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"const Api = EntityApi({\\n    currentUser: (payload) => get('/currentUser', payload)\\n    course: {\\n        get: (payload) => get('/user', payload),\\n        create: (payload) => post('/user', payload)\\n    }\\n}, ApplicationSchema);\\n\\nexport const useCurrentUser = Api.currentUser.useRequest;\\nexport const useCourseGet = Api.course.get.useRequest;\\nexport const useCourseCreate = Api.course.create.useRequest;\\n\\nexport const Provider = Api.Provider;\\n\")), mdx(\"h3\", null, \"schema\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"type:\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"StructuralSchema\")), mdx(\"p\", null, \"When data is returned from an api function Enty will use this schema to start the normalizing\\nprocess. This schema functions similarly to the \", \"[graphql]\", \" root resolver and works like a small\\nnamespace for your specific schemas. \"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"There is no required type of schema, but in most cases an\\nObjectSchema makes the most sense.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Schema is optional. If you dont provide a schema all your request state will still be tracked but nothing will be normalized.\")))), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"const user = new EntitySchema('user');\\nconst course = new EntitySchema('course');\\nconst course = new EntitySchema('course');\\nconst rootSchema = new ObjectSchema({\\n    user,\\n    course,\\n    location\\n});\\n\\nEntityApi(rootSchema, actionMap);\\n\")), mdx(\"h2\", null, \"Returns\"), mdx(\"p\", null, \"EntityApi traverses the provided object map and wraps each promise function in RequestHook and a RequestHoc.This lets you group portions of your api as it make sense to.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"const api = EntityApi({\\n    course: {\\n        get: (payload) => get('/course', payload),\\n        create: (payload) => post('/course', payload),\\n        save: (payload) => post(`/course/${payload.id}`, payload)\\n    },\\n    user: {\\n        get: (payload) => get('/course', payload),\\n        create: (payload) => post('/course', payload),\\n        save: (payload) => post(`/course/${payload.id}`, payload)\\n    }\\n});\\n\\nexport const getUserHook = api.user.get.useRequest;\\nexport const createCourseHoc = api.course.create.requestHoc;\\n\")), mdx(\"h3\", null, \"useRequest\"), mdx(\"p\", null, \"See \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/api/react-enty/request-hook\"\n  }), \"RequestHook\")), mdx(\"h3\", null, \"RequestHoc\"), mdx(\"p\", null, \"See \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/api/react-enty/request-hoc\"\n  }), \"RequestHoc\")), mdx(\"h2\", null, \"Root Returns\"), mdx(\"p\", null, \"EntityApi also returns a few global tools at the root level that are necessary for your application.\"), mdx(\"h3\", null, \"Provider\"), mdx(\"p\", null, \"The Provider links lets Request Hooks connect to the Enty store via context. It must be rendered above any component that uses a Request hook or hoc.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-jsx\"\n  }), \"import Api from './EntityApi';\\nimport ThemeProvider from './ThemeProvider';\\n\\nexport default function MainView() {\\n    return <Api.Provider>\\n        <ThemeProvider>\\n            <AppComponent/>\\n        </ThemeProvider>\\n    </Api.Provider>;\\n}\\n\")), mdx(\"h3\", null, \"ProviderHoc\"), mdx(\"p\", null, \"The ProviderHoc wraps the Provider in a hoc. This is useful if your \"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-jsx\"\n  }), \"import Api from './EntityApi';\\nimport ThemeProviderHoc from './ThemeProviderHoc';\\nimport composeWith from 'unmutable/composeWith';\\n\\nexport default composeWith(\\n    Api.ProviderHoc(),\\n    ThemeProviderHoc(),\\n    AppComponent\\n);\\n\")), mdx(\"h3\", null, \"useRemove\"), mdx(\"p\", null, \"Returns a side-effect that will remove an entity from the store.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-jsx\"\n  }), \"// RemoveUser.jsx\\nimport api from './EntityApi';\\n\\nexport default function RemoveUser(props) {\\n    const remove = api.useRemove();\\n    return <button onClick={() => remove('user', props.id)}>Remove User</button>;\\n}\\n\")), mdx(\"h3\", null, \"RemoveHoc\"), mdx(\"p\", null, \"Hocs a component with a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"useRemove\"), \" hook and provides the side-effect to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"config.name\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-jsx\"\n  }), \"// RemoveUser.jsx\\nimport api from './EntityApi';\\n\\nfunction RemoveUser({onRemove, id}) {\\n    return <button onClick={() => onRemove('user', id)}>Remove User</button>;\\n}\\n\\nexport default api.RemoveHoc({name: 'onRemove'})(RemoveUser);\\n\")), mdx(\"h2\", null, \"Examples\"), mdx(\"h3\", null, \"Combining Multiple Apis\"), mdx(\"p\", null, \"Because the api is declarative, it is easy to split portions of your api into different files.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"// UserApi.js\\nexport default {\\n    get: payload => request.get('/user', payload),\\n    create: payload => request.post('/user', payload),\\n    save: payload => request.post(`/user/${payload.id}`, payload)\\n};\\n\\n// CourseApi.js\\nexport default {\\n    get: payload => request.get('/course', payload),\\n    create: payload => request.post('/course', payload),\\n    save: payload => request.post(`/course/${payload.id}`, payload)\\n};\\n\\n// EntityApi.js\\nimport UserApi from './UserApi';\\nimport CourseApi from './CourseApi';\\nconst Api = EntityApi({\\n    user: UserApi,\\n    course: CourseApi\\n}, EntitySchema);\\n\\n\")));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"api/react-enty/entity-api/"},"headings":[{"depth":2,"value":"Params"},{"depth":3,"value":"actionMap"},{"depth":3,"value":"schema"},{"depth":2,"value":"Returns"},{"depth":3,"value":"useRequest"},{"depth":3,"value":"RequestHoc"},{"depth":2,"value":"Root Returns"},{"depth":3,"value":"Provider"},{"depth":3,"value":"ProviderHoc"},{"depth":3,"value":"useRemove"},{"depth":3,"value":"RemoveHoc"},{"depth":2,"value":"Examples"},{"depth":3,"value":"Combining Multiple Apis"}],"frontmatter":{"title":"Entity Api"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"id":"510c6c3a-e7d9-59d1-bddc-3f3634018d38"}}}