const addToContext = property => assign({
    [property]: (context, event) => {
        onValid();  // change the background back to normal
        return context[property] + event.detail.value;
    }
});

const [addToNum1, addToNum2, addToOperation, addToResult] = 
      ["num1", "num2", "operation", "result"].map(key => addToContext(key));

const contextKeys = ["num1", "num2", "operation", "result"];
const clearResult = assign(contextKeys
                           .reduce((obj, x) => ({ ...obj, 
                                                  [x]: () => { onValid(); return ""; } 
                                                }), {}));

const calculateResult = assign({
    result: (context, event) => {
        onValid(); // change the background back to normal
        let num1 = convertNumber(context.num1);
        let num2 = convertNumber(context.num2);

        let opFunction = actionMapping[context.operation]
        if (opFunction) {
            let result = opFunction(num1, num2);
            if (result !== "Invalid") {
                return toBit(opFunction(num1, num2));
            }
            return result;
        }
        return "error";
    }
})