From 1f26a9f6f30e5fe2b800ce9cf0cd2badcc07f3d4 Mon Sep 17 00:00:00 2001 From: Fabien JUIF Date: Mon, 14 Jan 2019 14:58:09 +0100 Subject: [PATCH] :sparkles: driver / form / add modified fields in action --- .../form/__snapshots__/index.spec.js.snap | 168 ++++++++++++++++++ packages/drivers/form/dist/index.es.js | 2 +- packages/drivers/form/dist/index.umd.js | 2 +- .../form/src/__snapshots__/index.spec.js.snap | 168 ++++++++++++++++++ packages/drivers/form/src/actions.js | 18 +- packages/drivers/form/src/bulk.actions.js | 8 +- packages/drivers/form/src/form.js | 51 +++--- packages/drivers/form/src/selectors.js | 4 +- 8 files changed, 391 insertions(+), 30 deletions(-) diff --git a/packages/drivers/form/__snapshots__/index.spec.js.snap b/packages/drivers/form/__snapshots__/index.spec.js.snap index 210e74b..1f51862 100644 --- a/packages/drivers/form/__snapshots__/index.spec.js.snap +++ b/packages/drivers/form/__snapshots__/index.spec.js.snap @@ -20,6 +20,10 @@ Object { exports[`drivers/form [custom path and key] should get all errors 1`] = ` Object { "errors": Object { + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -29,6 +33,10 @@ Object { exports[`drivers/form [custom path and key] should get all values 1`] = ` Object { "values": Object { + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -63,6 +71,7 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [], }, ], ], @@ -106,6 +115,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -119,6 +132,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -159,6 +176,10 @@ Object { "form1", Object { "customKey": "form1", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -167,6 +188,10 @@ Object { "form2", Object { "customKey": "form2", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -175,6 +200,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -188,6 +217,10 @@ Object { "form1", Object { "customKey": "form1", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -196,6 +229,10 @@ Object { "form2", Object { "customKey": "form2", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -204,6 +241,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -224,6 +265,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -237,6 +282,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -277,6 +326,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -310,6 +363,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -339,6 +396,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -363,6 +424,9 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "second", + ], "first": "value", "second": "NEW_VALUE", }, @@ -407,6 +471,9 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "second", + ], "second": "NEW_VALUE", }, ], @@ -439,6 +506,10 @@ Object { exports[`drivers/form [default path and key] should get all errors 1`] = ` Object { "errors": Object { + "@@form-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -448,6 +519,10 @@ Object { exports[`drivers/form [default path and key] should get all values 1`] = ` Object { "values": Object { + "@@form-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -479,6 +554,7 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [], "@@form-name": "form-name", }, ], @@ -522,6 +598,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -535,6 +615,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -575,6 +659,10 @@ Object { Array [ "form1", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form1", "first": "value", "second": "otherValue", @@ -583,6 +671,10 @@ Object { Array [ "form2", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form2", "first": "value", "second": "otherValue", @@ -591,6 +683,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -604,6 +700,10 @@ Object { Array [ "form1", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form1", "first": "value", "second": "otherValue", @@ -612,6 +712,10 @@ Object { Array [ "form2", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form2", "first": "value", "second": "otherValue", @@ -620,6 +724,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -640,6 +748,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -653,6 +765,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -693,6 +809,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -726,6 +846,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -755,6 +879,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -779,6 +907,9 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "second", + ], "@@form-name": "form-name", "first": "value", "second": "NEW_VALUE", @@ -823,6 +954,9 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "second", + ], "@@form-name": "form-name", "second": "NEW_VALUE", }, @@ -844,10 +978,16 @@ Object { "errors": Object {}, "values": Object { "form-1": Object { + "@@form-fields": Array [ + "lastname", + ], "@@form-name": "form-1", "lastname": "crespel", }, "form-2": Object { + "@@form-fields": Array [ + "firstname", + ], "@@form-name": "form-2", "firstname": "fabien", }, @@ -861,12 +1001,18 @@ Object { "state": Object { "errors": Object { "form-3": Object { + "@@form-fields": Array [ + "lastname", + ], "@@form-name": "form-3", "lastname": "required", }, }, "values": Object { "form-3": Object { + "@@form-fields": Array [ + "firstname", + ], "@@form-name": "form-3", "firstname": "delphine", }, @@ -880,10 +1026,16 @@ Object { "state": Object { "errors": Object { "form-1": Object { + "@@form-fields": Array [ + "firstname", + ], "@@form-name": "form-1", "firstname": "required", }, "form-2": Object { + "@@form-fields": Array [ + "lastname", + ], "@@form-name": "form-2", "lastname": "required", }, @@ -899,11 +1051,19 @@ Object { "errors": Object {}, "values": Object { "form-1": Object { + "@@form-fields": Array [ + "firstname", + "lastname", + ], "@@form-name": "form-1", "firstname": "guillaume", "lastname": "crespel", }, "form-2": Object { + "@@form-fields": Array [ + "firstname", + "lastname", + ], "@@form-name": "form-2", "firstname": "fabien", "lastname": "juif", @@ -922,11 +1082,19 @@ Object { "firstname": "guillaume", "lastname": "crespel", "my-key": "form-1", + "my-key-fields": Array [ + "firstname", + "lastname", + ], }, "form-2": Object { "firstname": "fabien", "lastname": "juif", "my-key": "form-2", + "my-key-fields": Array [ + "firstname", + "lastname", + ], }, }, }, diff --git a/packages/drivers/form/dist/index.es.js b/packages/drivers/form/dist/index.es.js index ec1bb3b..9048aa3 100644 --- a/packages/drivers/form/dist/index.es.js +++ b/packages/drivers/form/dist/index.es.js @@ -1 +1 @@ -import{types}from"k-ramel";function _defineProperty(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function _objectSpread(r){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return e[n].addOrUpdate(_objectSpread(_defineProperty({},r,t),o))}};return{set:n("values"),setErrors:n("errors"),clearErrors:function(){return e.errors.reset(t)},update:function(n){return function(o){var u;return e.values.update((_defineProperty(u={},r,t),_defineProperty(u,n,o),u))}},remove:function(){e.values.remove(t),e.errors.remove(t)}}}}},bulkActions=function(r){return function(e){var t=function(t){return function(n){return e[t].addOrUpdate(n.map(function(e){var t=e.name;return _objectSpread({},e.values,_defineProperty({},r,t))}))}};return{set:t("values"),setErrors:t("errors"),clearErrors:e.errors.remove,remove:function(r){e.values.remove(r),e.errors.remove(r)}}}},selectors=function(r){return function(e){return function(t){var n=function(n){return function(o){var u=e[n].get(t);if(!u)return o?"":{};if(!o&&u){var i=_objectSpread({},u);return delete i[r],i}var c=u[o];return null==c?"":c}};return{exists:function(){return!!e.values.get(t)},get:n("values"),getErrors:n("errors")}}}},utils=function(r){return{find:function(e){return r.values.getKeys().filter(function(r){return r.match(e)})}}},form=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=r.path,t=void 0===e?"form":e,n=r.getState,o=void 0===n?function(r){return r.form}:n,u=r.key,i=void 0===u?"@@form-name":u;return{getReducer:function(){return{path:t,reducer:{values:types.keyValue({key:i}),errors:types.keyValue({key:i})}}},getDriver:function(r){var e=o(r);return Object.assign(function(r){return _objectSpread({},actions(i)(e)(r),selectors(i)(e)(r))},bulkActions(i)(e),utils(e))}}};export default form; +import{types}from"k-ramel";function _defineProperty(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _objectSpread(e){for(var r=1;r0&&void 0!==arguments[0]?arguments[0]:{};return e[o].addOrUpdate(_objectSpread({},i,(_defineProperty(u={},r,n),_defineProperty(u,t,Object.keys(i)),u)))}};return{set:o("values"),setErrors:o("errors"),update:function(o){return function(u){var i;return e.values.update((_defineProperty(i={},r,n),_defineProperty(i,t,[o]),_defineProperty(i,o,u),i))}},clearErrors:function(){return e.errors.reset(n)},remove:function(){e.values.remove(n),e.errors.remove(n)}}}}},bulkActions=function(e){var r=e.keyName,t=e.keyFields;return function(e){var n=function(n){return function(o){return e[n].addOrUpdate(o.map(function(e){var n,o=e.name,u=e.values;return _objectSpread({},u,(_defineProperty(n={},r,o),_defineProperty(n,t,Object.keys(u)),n))}))}};return{set:n("values"),setErrors:n("errors"),clearErrors:e.errors.remove,remove:function(r){e.values.remove(r),e.errors.remove(r)}}}},selectors=function(e){var r=e.keyName;return function(e){return function(t){var n=function(n){return function(o){var u=e[n].get(t);if(!u)return o?"":{};if(!o&&u){var i=_objectSpread({},u);return delete i[r],i}var a=u[o];return null==a?"":a}};return{exists:function(){return!!e.values.get(t)},get:n("values"),getErrors:n("errors")}}}},utils=function(e){return{find:function(r){return e.values.getKeys().filter(function(e){return e.match(r)})}}},form=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.path,t=void 0===r?"form":r,n=e.getState,o=void 0===n?function(e){return e.form}:n,u=e.key,i=void 0===u?"@@form-name":u,a=i,c="@@form";"@@form-name"!==i&&(c=i);var f="".concat(c,"-fields");return{getReducer:function(){return{path:t,reducer:{values:types.keyValue({key:a}),errors:types.keyValue({key:a})}}},getDriver:function(e){var r=o(e);return Object.assign(function(e){return _objectSpread({},actions({keyName:a,keyFields:f})(r)(e),selectors({keyName:a,keyFields:f})(r)(e))},bulkActions({keyName:a,keyFields:f})(r),utils(r))}}};export default form; diff --git a/packages/drivers/form/dist/index.umd.js b/packages/drivers/form/dist/index.umd.js index d31566f..196ba8a 100644 --- a/packages/drivers/form/dist/index.umd.js +++ b/packages/drivers/form/dist/index.umd.js @@ -1 +1 @@ -!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("k-ramel")):"function"==typeof define&&define.amd?define(["k-ramel"],e):(r=r||self)["@k-ramel/driver-form"]=e(r.kRamel)}(this,function(r){"use strict";function e(r,e,n){return e in r?Object.defineProperty(r,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):r[e]=n,r}function n(r){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{},u=t.path,o=void 0===u?"form":u,i=t.getState,f=void 0===i?function(r){return r.form}:i,c=t.key,a=void 0===c?"@@form-name":c;return{getReducer:function(){return{path:o,reducer:{values:r.types.keyValue({key:a}),errors:r.types.keyValue({key:a})}}},getDriver:function(r){var t=f(r);return Object.assign(function(r){return n({},function(r){return function(t){return function(u){var o=function(o){return function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t[o].addOrUpdate(n(e({},r,u),i))}};return{set:o("values"),setErrors:o("errors"),clearErrors:function(){return t.errors.reset(u)},update:function(n){return function(o){var i;return t.values.update((e(i={},r,u),e(i,n,o),i))}},remove:function(){t.values.remove(u),t.errors.remove(u)}}}}}(a)(t)(r),function(r){return function(e){return function(t){var u=function(u){return function(o){var i=e[u].get(t);if(!i)return o?"":{};if(!o&&i){var f=n({},i);return delete f[r],f}var c=i[o];return null==c?"":c}};return{exists:function(){return!!e.values.get(t)},get:u("values"),getErrors:u("errors")}}}}(a)(t)(r))},function(r){return function(t){var u=function(u){return function(o){return t[u].addOrUpdate(o.map(function(t){var u=t.name;return n({},t.values,e({},r,u))}))}};return{set:u("values"),setErrors:u("errors"),clearErrors:t.errors.remove,remove:function(r){t.values.remove(r),t.errors.remove(r)}}}}(a)(t),function(r){return{find:function(e){return r.values.getKeys().filter(function(r){return r.match(e)})}}}(t))}}}}); +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("k-ramel")):"function"==typeof define&&define.amd?define(["k-ramel"],r):(e=e||self)["@k-ramel/driver-form"]=r(e.kRamel)}(this,function(e){"use strict";function r(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function n(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{},u=t.path,o=void 0===u?"form":u,i=t.getState,a=void 0===i?function(e){return e.form}:i,f=t.key,c=void 0===f?"@@form-name":f,s=c,l="@@form";"@@form-name"!==c&&(l=c);var v="".concat(l,"-fields");return{getReducer:function(){return{path:o,reducer:{values:e.types.keyValue({key:s}),errors:e.types.keyValue({key:s})}}},getDriver:function(e){var t=a(e);return Object.assign(function(e){return n({},function(e){var t=e.keyName,u=e.keyFields;return function(e){return function(o){var i=function(i){return function(){var a,f=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e[i].addOrUpdate(n({},f,(r(a={},t,o),r(a,u,Object.keys(f)),a)))}};return{set:i("values"),setErrors:i("errors"),update:function(n){return function(i){var a;return e.values.update((r(a={},t,o),r(a,u,[n]),r(a,n,i),a))}},clearErrors:function(){return e.errors.reset(o)},remove:function(){e.values.remove(o),e.errors.remove(o)}}}}}({keyName:s,keyFields:v})(t)(e),function(e){var r=e.keyName;return function(e){return function(t){var u=function(u){return function(o){var i=e[u].get(t);if(!i)return o?"":{};if(!o&&i){var a=n({},i);return delete a[r],a}var f=i[o];return null==f?"":f}};return{exists:function(){return!!e.values.get(t)},get:u("values"),getErrors:u("errors")}}}}({keyName:s,keyFields:v})(t)(e))},function(e){var t=e.keyName,u=e.keyFields;return function(e){var o=function(o){return function(i){return e[o].addOrUpdate(i.map(function(e){var o,i=e.name,a=e.values;return n({},a,(r(o={},t,i),r(o,u,Object.keys(a)),o))}))}};return{set:o("values"),setErrors:o("errors"),clearErrors:e.errors.remove,remove:function(r){e.values.remove(r),e.errors.remove(r)}}}}({keyName:s,keyFields:v})(t),function(e){return{find:function(r){return e.values.getKeys().filter(function(e){return e.match(r)})}}}(t))}}}}); diff --git a/packages/drivers/form/src/__snapshots__/index.spec.js.snap b/packages/drivers/form/src/__snapshots__/index.spec.js.snap index 210e74b..1f51862 100644 --- a/packages/drivers/form/src/__snapshots__/index.spec.js.snap +++ b/packages/drivers/form/src/__snapshots__/index.spec.js.snap @@ -20,6 +20,10 @@ Object { exports[`drivers/form [custom path and key] should get all errors 1`] = ` Object { "errors": Object { + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -29,6 +33,10 @@ Object { exports[`drivers/form [custom path and key] should get all values 1`] = ` Object { "values": Object { + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -63,6 +71,7 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [], }, ], ], @@ -106,6 +115,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -119,6 +132,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -159,6 +176,10 @@ Object { "form1", Object { "customKey": "form1", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -167,6 +188,10 @@ Object { "form2", Object { "customKey": "form2", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -175,6 +200,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -188,6 +217,10 @@ Object { "form1", Object { "customKey": "form1", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -196,6 +229,10 @@ Object { "form2", Object { "customKey": "form2", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -204,6 +241,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -224,6 +265,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -237,6 +282,10 @@ Object { "notRemove", Object { "customKey": "notRemove", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -277,6 +326,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -310,6 +363,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -339,6 +396,10 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -363,6 +424,9 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "second", + ], "first": "value", "second": "NEW_VALUE", }, @@ -407,6 +471,9 @@ Object { "form-name", Object { "customKey": "form-name", + "customKey-fields": Array [ + "second", + ], "second": "NEW_VALUE", }, ], @@ -439,6 +506,10 @@ Object { exports[`drivers/form [default path and key] should get all errors 1`] = ` Object { "errors": Object { + "@@form-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -448,6 +519,10 @@ Object { exports[`drivers/form [default path and key] should get all values 1`] = ` Object { "values": Object { + "@@form-fields": Array [ + "first", + "second", + ], "first": "value", "second": "otherValue", }, @@ -479,6 +554,7 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [], "@@form-name": "form-name", }, ], @@ -522,6 +598,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -535,6 +615,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -575,6 +659,10 @@ Object { Array [ "form1", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form1", "first": "value", "second": "otherValue", @@ -583,6 +671,10 @@ Object { Array [ "form2", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form2", "first": "value", "second": "otherValue", @@ -591,6 +683,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -604,6 +700,10 @@ Object { Array [ "form1", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form1", "first": "value", "second": "otherValue", @@ -612,6 +712,10 @@ Object { Array [ "form2", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form2", "first": "value", "second": "otherValue", @@ -620,6 +724,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -640,6 +748,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -653,6 +765,10 @@ Object { Array [ "notRemove", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "notRemove", "first": "value", "second": "otherValue", @@ -693,6 +809,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -726,6 +846,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -755,6 +879,10 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "first", + "second", + ], "@@form-name": "form-name", "first": "value", "second": "otherValue", @@ -779,6 +907,9 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "second", + ], "@@form-name": "form-name", "first": "value", "second": "NEW_VALUE", @@ -823,6 +954,9 @@ Object { Array [ "form-name", Object { + "@@form-fields": Array [ + "second", + ], "@@form-name": "form-name", "second": "NEW_VALUE", }, @@ -844,10 +978,16 @@ Object { "errors": Object {}, "values": Object { "form-1": Object { + "@@form-fields": Array [ + "lastname", + ], "@@form-name": "form-1", "lastname": "crespel", }, "form-2": Object { + "@@form-fields": Array [ + "firstname", + ], "@@form-name": "form-2", "firstname": "fabien", }, @@ -861,12 +1001,18 @@ Object { "state": Object { "errors": Object { "form-3": Object { + "@@form-fields": Array [ + "lastname", + ], "@@form-name": "form-3", "lastname": "required", }, }, "values": Object { "form-3": Object { + "@@form-fields": Array [ + "firstname", + ], "@@form-name": "form-3", "firstname": "delphine", }, @@ -880,10 +1026,16 @@ Object { "state": Object { "errors": Object { "form-1": Object { + "@@form-fields": Array [ + "firstname", + ], "@@form-name": "form-1", "firstname": "required", }, "form-2": Object { + "@@form-fields": Array [ + "lastname", + ], "@@form-name": "form-2", "lastname": "required", }, @@ -899,11 +1051,19 @@ Object { "errors": Object {}, "values": Object { "form-1": Object { + "@@form-fields": Array [ + "firstname", + "lastname", + ], "@@form-name": "form-1", "firstname": "guillaume", "lastname": "crespel", }, "form-2": Object { + "@@form-fields": Array [ + "firstname", + "lastname", + ], "@@form-name": "form-2", "firstname": "fabien", "lastname": "juif", @@ -922,11 +1082,19 @@ Object { "firstname": "guillaume", "lastname": "crespel", "my-key": "form-1", + "my-key-fields": Array [ + "firstname", + "lastname", + ], }, "form-2": Object { "firstname": "fabien", "lastname": "juif", "my-key": "form-2", + "my-key-fields": Array [ + "firstname", + "lastname", + ], }, }, }, diff --git a/packages/drivers/form/src/actions.js b/packages/drivers/form/src/actions.js index 757e2b4..887c28b 100644 --- a/packages/drivers/form/src/actions.js +++ b/packages/drivers/form/src/actions.js @@ -1,11 +1,21 @@ -export default key => state => (name) => { - const set = type => (values = {}) => state[type].addOrUpdate({ [key]: name, ...values }) +export default ({ keyName, keyFields }) => state => (name) => { + const set = type => (values = {}) => state[type].addOrUpdate({ + ...values, + [keyName]: name, + [keyFields]: Object.keys(values), + }) + + const update = field => value => state.values.update({ + [keyName]: name, + [keyFields]: [field], + [field]: value, + }) return ({ set: set('values'), setErrors: set('errors'), - clearErrors: () => state.errors.reset(name), // TODO: this is a bug? - update: field => value => state.values.update({ [key]: name, [field]: value }), + update, + clearErrors: () => state.errors.reset(name), remove: () => { state.values.remove(name) state.errors.remove(name) diff --git a/packages/drivers/form/src/bulk.actions.js b/packages/drivers/form/src/bulk.actions.js index e584cec..0d5bc92 100644 --- a/packages/drivers/form/src/bulk.actions.js +++ b/packages/drivers/form/src/bulk.actions.js @@ -1,5 +1,9 @@ -export default key => (state) => { - const set = type => forms => state[type].addOrUpdate(forms.map(({ name, values }) => ({ ...values, [key]: name }))) +export default ({ keyName, keyFields }) => (state) => { + const set = type => forms => state[type].addOrUpdate(forms.map(({ name, values }) => ({ + ...values, + [keyName]: name, + [keyFields]: Object.keys(values), + }))) return ({ set: set('values'), diff --git a/packages/drivers/form/src/form.js b/packages/drivers/form/src/form.js index f396206..cb9251d 100644 --- a/packages/drivers/form/src/form.js +++ b/packages/drivers/form/src/form.js @@ -8,24 +8,35 @@ export default ({ path = 'form', getState = store => store.form, key = '@@form-name', -} = {}) => ({ - getReducer: () => ({ - path, - reducer: { - values: types.keyValue({ key }), - errors: types.keyValue({ key }), - }, - }), - getDriver: (store) => { - const state = getState(store) +} = {}) => { + const keyName = key + let baseKey = '@@form' + + // in case this is not the default key that is given, we just consider the baseKey is the key + // in this case this is not a breaking change from 1.2.0 to 1.3.0 + if (key !== '@@form-name') baseKey = key + + const keyFields = `${baseKey}-fields` - return Object.assign( - name => ({ - ...actions(key)(state)(name), - ...selectors(key)(state)(name), - }), - bulkActions(key)(state), - utils(state), - ) - }, -}) + return { + getReducer: () => ({ + path, + reducer: { + values: types.keyValue({ key: keyName }), + errors: types.keyValue({ key: keyName }), + }, + }), + getDriver: (store) => { + const state = getState(store) + + return Object.assign( + name => ({ + ...actions({ keyName, keyFields })(state)(name), + ...selectors({ keyName, keyFields })(state)(name), + }), + bulkActions({ keyName, keyFields })(state), + utils(state), + ) + }, + } +} diff --git a/packages/drivers/form/src/selectors.js b/packages/drivers/form/src/selectors.js index 9a40714..e336be6 100644 --- a/packages/drivers/form/src/selectors.js +++ b/packages/drivers/form/src/selectors.js @@ -1,4 +1,4 @@ -export default key => state => (name) => { +export default ({ keyName }) => state => (name) => { const get = type => (field) => { const values = state[type].get(name) if (!values) { @@ -9,7 +9,7 @@ export default key => state => (name) => { if (!field && values) { // remove `key` from the result so as not to pollute const rest = { ...values } - delete rest[key] + delete rest[keyName] return rest }