Skip to content

Commit

Permalink
fix: Replaced object-hash with hash-sum to hopefully get a more deter…
Browse files Browse the repository at this point in the history
…ministic hash
  • Loading branch information
Jake Ginnivan committed May 27, 2019
1 parent 9e014fe commit c83b4e0
Show file tree
Hide file tree
Showing 6 changed files with 1,203 additions and 1,231 deletions.
53 changes: 0 additions & 53 deletions example/example.tsx

This file was deleted.

11 changes: 6 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,20 @@
},
"dependencies": {
"cuid": "^2.1.6",
"object-hash": "^1.3.1",
"hash-sum": "^1.0.2",
"promise-completion-source": "^1.0.0"
},
"peerDependencies": {
"react": "^16.6.0",
"typescript-log": "^1.1.0",
"tslib": "^1.9.3"
"tslib": "^1.9.3",
"typescript-log": "^1.1.0"
},
"devDependencies": {
"@types/cuid": "^1.3.0",
"@types/enzyme": "^3.9.0",
"@types/enzyme-adapter-react-16": "^1.0.5",
"@types/hash-sum": "^1.0.0",
"@types/jest": "^24.0.12",
"@types/object-hash": "^1.2.0",
"@types/react": "^16.8.6",
"@types/react-dom": "^16.8.2",
"enzyme": "^3.8.0",
Expand All @@ -58,6 +58,7 @@
"tslint-eslint-rules": "^5.4.0",
"tslint-react": "^4.0.0",
"typescript": "^3.3.3333",
"typescript-log": "^1.1.0"
"typescript-log": "^1.1.0",
"tslib": "^1.9.3"
}
}
6 changes: 5 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,11 @@ When you register `resources` they return a DataLoader, a fully type-safe React
You can load multiple DataLoaders in a single page. Each `DataLoader` will fetch the resource once, sharing the data between data-loaders when the parameters match.
​​The `DataProvider` component is responsible for fetching the data. When `DataLoader`s are mounted they register with the data provider so it can notify the `DataLoader`s when any relevant data is updated. This means DataLoaders only re-render when the data they are interested in is updated.
​​The `DataProvider` component is responsible for fetching the data. When `DataLoader`s are mounted they register with the data provider so it can notify the `DataLoader`s when any relevant data is updated. This means DataLoaders only re-render when the data they are interested in is updated.
### Params hashing
Behind the scenes the data loader uses a library called `hash-sum` to create hashes of the parameter object. You can override it on the DataProvider
## More info
Expand Down
7 changes: 5 additions & 2 deletions src/data-loader-store-and-loader.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import objectHash from 'object-hash'
import { DataProviderEvents } from './events'
import { LoaderState, LoaderStatus } from './data-loader-state'
import { isPromise } from './utils'
Expand All @@ -22,6 +21,9 @@ export interface LoadParams {
[param: string]: any
}

/** Takes an object and produces a consistent hash */
export type ObjectHash = (obj: object) => string

// Some other names
// DataLoaderDataAccessor
// DataLoaderCore
Expand Down Expand Up @@ -54,6 +56,7 @@ export class DataLoaderStoreAndLoader {
onEvent: (event: DataProviderEvents) => void | Promise<any>,
initialState: DataLoaderState | undefined,
private performLoad: (dataLoadParams: LoadParams) => Promise<any> | any,
private objectHash: ObjectHash,
public isServerSideRender: boolean,
) {
this.onEvent = event => {
Expand Down Expand Up @@ -84,7 +87,7 @@ export class DataLoaderStoreAndLoader {
}, {})
: dataLoadParams

return objectHash(cacheParams)
return this.objectHash(cacheParams)
}

attach(
Expand Down
13 changes: 10 additions & 3 deletions src/data-provider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,20 @@ import React from 'react'
import { DataLoaderResources } from './data-loader-resources'
import { DataProviderEvents } from './events'
import { DataLoaderContextComponent } from './data-loader-context'
import { DataLoaderStoreAndLoader, DataLoaderState } from './data-loader-store-and-loader'
import {
DataLoaderStoreAndLoader,
DataLoaderState,
ObjectHash,
} from './data-loader-store-and-loader'

export interface Props {
initialState?: DataLoaderState
onEvent?: (event: DataProviderEvents) => void | Promise<any>
isServerSideRender?: boolean
resources: DataLoaderResources<any>
globalProps?: object
/** Override the object hasing function */
objectHash?: ObjectHash
}

export class DataLoaderProvider extends React.Component<Props> {
Expand All @@ -30,10 +36,11 @@ export class DataLoaderProvider extends React.Component<Props> {

return dataLoader({
...this.props.globalProps,
...params
...params,
})
},
this.props.isServerSideRender || false
this.props.objectHash || require('hash-sum'),
this.props.isServerSideRender || false,
)
}

Expand Down
Loading

0 comments on commit c83b4e0

Please sign in to comment.