Skip to content

Commit

Permalink
wip: wip
Browse files Browse the repository at this point in the history
  • Loading branch information
dxinteractive committed Jun 22, 2019
1 parent af9b05b commit a9b4bf7
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 14 deletions.
2 changes: 1 addition & 1 deletion packages/dataparcels-docs/yalc.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"version": "v1",
"packages": {
"react-dataparcels": {
"signature": "203b5a8de364b61c7dd93cd90bcd8f2b",
"signature": "2e6cda8adde0eecfd4a3af81a1613cc8",
"file": true,
"replaced": "^0.21.0"
},
Expand Down
47 changes: 47 additions & 0 deletions packages/react-dataparcels/src/__test__/useParcelBuffer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,53 @@ describe('useParcelBuffer should use config.parcel', () => {
expect(result.current[1].actions.length).toBe(0);
});

it('should keep inner parcel and buffer contents if outer parcel is different and mergeMode is "rebase"', () => {

let parcel = new Parcel({
value: {
abc: 100,
def: 100
}
});

let {result, rerender} = renderHookWithProps({parcel}, ({parcel}) => useParcelBuffer({parcel}));

act(() => {
result.current[0].set('abc', 400);
});

// confirm that set() has worked
expect(result.current[0].value).toEqual({
abc: 400,
def: 100
});

act(() => {
let parcel = new Parcel({
value: {
abc: 200,
def: 200
}
});

parcel._frameMeta.mergeMode = "rebase";

rerender({
parcel
});
});

// actions should be rebased onto new parcel from props
// and innter parcel should contain the resulting data
expect(result.current[0].value).toEqual({
abc: 400,
def: 200
});

// buffer should remain
expect(result.current[1].actions.length).toBe(1);
});

});

describe('useParcelBuffer should pass ParcelBoundaryControl', () => {
Expand Down
29 changes: 16 additions & 13 deletions packages/react-dataparcels/src/useParcelBuffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -174,21 +174,24 @@ export default (params: Params): Return => {
const newOuterParcel = params.parcel;
setOuterParcel(newOuterParcel);

// clear buffer if it exists
if(internalBuffer.bufferState) {
internalBuffer.reset();
}
if(!innerParcel || newOuterParcel._frameMeta.mergeMode !== "rebase") {

// clear buffer if it exists
if(internalBuffer.bufferState) {
internalBuffer.reset();
}

// boundary split to ensure that inner parcels chain are
// completely isolated from outer parcels chain
newInnerParcel = params.parcel
._boundarySplit({handleChange})
.pipe(
prepareInnerParcelFromOuter(),
applyModifiers
);
// boundary split to ensure that inner parcels chain are
// completely isolated from outer parcels chain
newInnerParcel = params.parcel
._boundarySplit({handleChange})
.pipe(
prepareInnerParcelFromOuter(),
applyModifiers
);

setInnerParcel(newInnerParcel);
setInnerParcel(newInnerParcel);
}
}

let returnedParcel: Parcel = innerParcel || newInnerParcel;
Expand Down

0 comments on commit a9b4bf7

Please sign in to comment.