thesmo-calc-fields-dictionarydeprecated

Calculating fields for dictionary

Usage no npm install needed!

<script type="module">
  import thesmoCalcFieldsDictionary from 'https://cdn.skypack.dev/thesmo-calc-fields-dictionary';
</script>

README

npm GitHub GitHub last commit npm

Summary

This package contains the collection of useful calculating fields for dictionary values.

API

API methods clarification

AddMultipleRecords

Signature

/* arguments object */
({
    recordToKey: (record: *) => string,
    newRecords: *[]
})
/* returns */
(source: object) => object

Usage example

const { 
    AddMulipleRecords, 
    Initialize 
} = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStore = Create({});

testStore.To({
    at: "dictionary",
    calcField: Initialize({})
});

testStore.To({
    at: "dictionary",
    calcField: AddMulipleRecords({
        newRecords: [{a: "a1"}, {a: "a2"}, {a: "a3"}],
        recordToKey: (record) => record.a
    })
});

AddRecord

Signature

/* arguments object */
({
    recordToKey: (record: *) => string,
    newRecord: *
})
/* returns */
(source: object) => object

Usage example

const { 
    AddRecord, 
    Initialize 
} = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStore = Create({});

testStore.To({
    at: "dictionary",
    calcField: Initialize({})
});

testStore.To({
    at: "dictionary",
    calcField: AddRecord({
        newRecord: {a: "a1"},
        recordToKey: (record) => record.a
    })
});

Initialize

Signature

/* arguments object */
({
    
})
/* returns */
(source: object) => object

Usage example

const { Initialize } = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStore = Create({});

testStore.To({
    at: "dictionaries.d1",
    calcField: Initialize({})
});

// now this field can be used as Thesmo dictionary

IsValidDictionary

Signature

/* arguments object */
({
    
})
/* returns */
(source: object) => boolean

Usage example

const { 
    Initialize,
    IsValidDictionary
} = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStore = Create({
    defaultState: {
        temp1: { hello: "world" }
    }
});

testStore.To({
    at: "dictionaries.d1",
    calcField: Initialize({})
});

// true
const thesmoDictionaryCheck = testStore.From({
    at: "dictionaries.d1",
    calcField: IsValidDictionary({})
});

// false
const commonObjectCheck = testStore.From({
    at: "temp1",
    calcField: IsValidDictionary({})
});

ObtainMultipleRecords

Signature

/* arguments object */
({
    keys: string[]
})
/* returns */
(source: object) => *[]

Usage example

const CalcFieldsBase = require("thesmo-calc-fields-base");
const DictionaryCalcFields = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStorage = Create({});

const initAndAddMultipleRecords = CalcFieldsBase.Pipe({
    fieldsShouldBePiped: [
        DictionaryCalcFields.Initialize({}),
        DictionaryCalcFields.AddMulipleRecords({
            newRecords: [{a: "a1"}, {a: "a2"}, {a: "a3"}],
            recordToKey: (record) => record.a
        })
    ]
});

testStorage.To({
    at: "dictionary",
    calcField: initAndAddMultipleRecords
});

// [{a: "a1"}, {a: "a3"}]
const a1_a3 = testStorage.From({
    at: "dictionary",
    calcField: DictionaryCalcFields.ObtainMultipleRecords({
        keys: ["a1", "a3"]
    })
});

ObtainRecord

Signature

/* arguments object */
({
    key: string
})
/* returns */
(source: object) => *

Usage example

const CalcFieldsBase = require("thesmo-calc-fields-base");
const DictionaryCalcFields = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStorage = Create({});

const initAndAddMultipleRecords = CalcFieldsBase.Pipe({
    fieldsShouldBePiped: [
        DictionaryCalcFields.Initialize({}),
        DictionaryCalcFields.AddMulipleRecords({
            newRecords: [{a: "a1"}, {a: "a2"}, {a: "a3"}],
            recordToKey: (record) => record.a
        })
    ]
});

testStorage.To({
    at: "dictionary",
    calcField: initAndAddMultipleRecords
});

// {a: "a1"}
const a1 = testStorage.From({
    at: "dictionary",
    calcField: DictionaryCalcFields.ObtainRecord({
        key: "a1"
    })
});

RemoveMultipleRecords

Signature

/* arguments object */
({
    keys: string[]
})
/* returns */
(source: object) => object

Usage example

const CalcFieldsBase = require("thesmo-calc-fields-base");
const DictionaryCalcFields = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStorage = Create({});

const initAndAddMultipleRecords = CalcFieldsBase.Pipe({
    fieldsShouldBePiped: [
        DictionaryCalcFields.Initialize({}),
        DictionaryCalcFields.AddMulipleRecords({
            newRecords: [{a: "a1"}, {a: "a2"}, {a: "a3"}],
            recordToKey: (record) => record.a
        })
    ]
});

testStorage.To({
    at: "dictionary",
    calcField: initAndAddMultipleRecords
});

testStorage.To({
    at: "dictionary",
    calcField: DictionaryCalcFields.RemoveMultipleRecords({
        keys: ["a1", "a3"]
    })
});

RemoveRecord

Signature

/* arguments object */
({
    key: string
})
/* returns */
(source: object) => object

Usage example

const CalcFieldsBase = require("thesmo-calc-fields-base");
const DictionaryCalcFields = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStorage = Create({});

const initAndAddMultipleRecords = CalcFieldsBase.Pipe({
    fieldsShouldBePiped: [
        DictionaryCalcFields.Initialize({}),
        DictionaryCalcFields.AddMulipleRecords({
            newRecords: [{a: "a1"}, {a: "a2"}, {a: "a3"}],
            recordToKey: (record) => record.a
        })
    ]
});

testStorage.To({
    at: "dictionary",
    calcField: initAndAddMultipleRecords
});

testStorage.To({
    at: "dictionary",
    calcField: DictionaryCalcFields.RemoveRecord({
        key: "a3"
    })
});

SearchForKeys

Signature

/* arguments object */
({
    searchParameters?: (index: number, key: string, record: *) => boolean
})
/* returns */
(source: object) => string[]

Usage example

const CalcFieldsBase = require("thesmo-calc-fields-base");
const DictionaryCalcFields = require("thesmo-calc-fields-dictionary");
const { Create } = require("thesmo-redux-store");

const testStorage = Create({});

const initAndAddMultipleRecords = CalcFieldsBase.Pipe({
    fieldsShouldBePiped: [
        DictionaryCalcFields.Initialize({}),
        DictionaryCalcFields.AddMulipleRecords({
            newRecords: [{a: "a1"}, {a: "a2"}, {a: "a3"}],
            recordToKey: (record) => record.a
        })
    ]
});

testStorage.To({
    at: "dictionary",
    calcField: initAndAddMultipleRecords
});

// ["a1", "a2", "a3"]
const allKeys = testStorage.From({
    at: "dictionary",
    calcField: DictionaryCalcFields.SearchForKeys({})
});

// ["a1", "a3"]
const specificKeys = testStorage.From({
    at: "dictionary",
    calcField: DictionaryCalcFields.SearchForKeys({
        searchParameters: function(index, key, record) {
            return index === 0 || key === "a3";
        }
    })
});

UpdateWithPattern

Signature

/* arguments object */
({
    isAbleToAddNewRecords?: boolean,
    updatingPattern: object
})
/* returns */
(source: object) => object

Usage example

const CalcFieldsBase = require("thesmo-calc-fields-base");
const DictionaryCalcFields = require("thesmo-calc-fields-dictionary");
const ThesmoReduxStore = require("thesmo-redux-store");

const testStorage = ThesmoReduxStore.Create({});

const initializeDictionary = DictionaryCalcFields.Initialize({});
const addDummyRecords = DictionaryCalcFields.AddMulipleRecords({
    newRecords: [{a: "a1"}, {a: "a2"}, {a: "a3"}, {a: "a4"}],
    recordToKey: source => source.a
});
const updateDictionary = DictionaryCalcFields.UpdateWithPattern({
    isAbleToAddNewRecords: true,
    updatingPattern: {
        a1: x => {return { ...x, a: x.a + "_modified" } },
        a5: {a: 55},
        a6: {aaa: 11}
    }
});

const allFields = [
    initializeDictionary, 
    addDummyRecords, 
    updateDictionary
];

testStorage.To({
    at: "d",
    calcField: CalcFieldsBase.Pipe({
        fieldsShouldBePiped: allFields
    })
});