Simple buttons on conditionals
This commit is contained in:
		
							parent
							
								
									2f503fbef6
								
							
						
					
					
						commit
						b06ac56efd
					
				| 
						 | 
					@ -211,6 +211,7 @@ module A = {
 | 
				
			||||||
  let unsafe_get = Array.unsafe_get;
 | 
					  let unsafe_get = Array.unsafe_get;
 | 
				
			||||||
  let get = Belt.Array.get;
 | 
					  let get = Belt.Array.get;
 | 
				
			||||||
  let getBy = Belt.Array.getBy;
 | 
					  let getBy = Belt.Array.getBy;
 | 
				
			||||||
 | 
					  let hasBy = (r, fn) => Belt.Array.getBy(r, fn) |> O.isSome;
 | 
				
			||||||
  let fold_left = Array.fold_left;
 | 
					  let fold_left = Array.fold_left;
 | 
				
			||||||
  let fold_right = Array.fold_right;
 | 
					  let fold_right = Array.fold_right;
 | 
				
			||||||
  let concatMany = Belt.Array.concatMany;
 | 
					  let concatMany = Belt.Array.concatMany;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ module Value = {
 | 
				
			||||||
    | Unselected;
 | 
					    | Unselected;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  type conditional = {
 | 
					  type conditional = {
 | 
				
			||||||
    statement: string,
 | 
					    name: string,
 | 
				
			||||||
    truthValue: bool,
 | 
					    truthValue: bool,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ module Value = {
 | 
				
			||||||
      |> ReasonReact.string
 | 
					      |> ReasonReact.string
 | 
				
			||||||
    | SelectSingle(r) => r |> ReasonReact.string
 | 
					    | SelectSingle(r) => r |> ReasonReact.string
 | 
				
			||||||
    | ConditionalArray(r) => "Array" |> ReasonReact.string
 | 
					    | ConditionalArray(r) => "Array" |> ReasonReact.string
 | 
				
			||||||
    | Conditional(r) => r.statement |> ReasonReact.string
 | 
					    | Conditional(r) => r.name |> ReasonReact.string
 | 
				
			||||||
    | FloatCdf(r) =>
 | 
					    | FloatCdf(r) =>
 | 
				
			||||||
      let cdf: Types.distribution =
 | 
					      let cdf: Types.distribution =
 | 
				
			||||||
        CdfLibrary.Distribution.fromString(r, 2000);
 | 
					        CdfLibrary.Distribution.fromString(r, 2000);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,26 @@ let handleChange = (handleChange, event) =>
 | 
				
			||||||
  handleChange(ReactEvent.Form.target(event)##value);
 | 
					  handleChange(ReactEvent.Form.target(event)##value);
 | 
				
			||||||
type onChange = option(Value.t) => unit;
 | 
					type onChange = option(Value.t) => unit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module ConditionalReducer = {
 | 
				
			||||||
 | 
					  type action =
 | 
				
			||||||
 | 
					    | ADD_OR_UPDATE_CONDITIONAL(Value.conditional)
 | 
				
			||||||
 | 
					    | REMOVE_CONDITIONAL(Value.conditional);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let reducer = (items: array(Value.conditional), action: action) =>
 | 
				
			||||||
 | 
					    switch (action) {
 | 
				
			||||||
 | 
					    | ADD_OR_UPDATE_CONDITIONAL(conditional) =>
 | 
				
			||||||
 | 
					      items->E.A.hasBy(c => c.name == conditional.name)
 | 
				
			||||||
 | 
					        ? items
 | 
				
			||||||
 | 
					          |> E.A.fmap((r: Value.conditional) =>
 | 
				
			||||||
 | 
					               r.name == conditional.name ? conditional : r
 | 
				
			||||||
 | 
					             )
 | 
				
			||||||
 | 
					        : E.A.append(items, [|conditional|])
 | 
				
			||||||
 | 
					    | REMOVE_CONDITIONAL(conditional) =>
 | 
				
			||||||
 | 
					      items
 | 
				
			||||||
 | 
					      |> E.A.filter((c: Value.conditional) => c.name != conditional.name)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[@react.component]
 | 
					[@react.component]
 | 
				
			||||||
let make =
 | 
					let make =
 | 
				
			||||||
    (
 | 
					    (
 | 
				
			||||||
| 
						 | 
					@ -11,7 +31,80 @@ let make =
 | 
				
			||||||
      ~onChange: onChange,
 | 
					      ~onChange: onChange,
 | 
				
			||||||
    ) => {
 | 
					    ) => {
 | 
				
			||||||
  switch (type_.type_, value) {
 | 
					  switch (type_.type_, value) {
 | 
				
			||||||
  | (Conditionals(_), r) => "sdfsdf" |> ReasonReact.string
 | 
					  | (Conditionals(l), Some(ConditionalArray(n))) =>
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					      {n
 | 
				
			||||||
 | 
					       |> E.A.fmap((r: Value.conditional) =>
 | 
				
			||||||
 | 
					            <div
 | 
				
			||||||
 | 
					              onClick={_ =>
 | 
				
			||||||
 | 
					                onChange(
 | 
				
			||||||
 | 
					                  Some(
 | 
				
			||||||
 | 
					                    Value.ConditionalArray(
 | 
				
			||||||
 | 
					                      ConditionalReducer.reducer(
 | 
				
			||||||
 | 
					                        n,
 | 
				
			||||||
 | 
					                        REMOVE_CONDITIONAL({name: r.name, truthValue: true}),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					              }>
 | 
				
			||||||
 | 
					              {r.name |> ReasonReact.string}
 | 
				
			||||||
 | 
					              {(r.truthValue ? "TRUE" : "FALSE") |> ReasonReact.string}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					       |> ReasonReact.array}
 | 
				
			||||||
 | 
					      {l.options
 | 
				
			||||||
 | 
					       |> E.A.fmap(r =>
 | 
				
			||||||
 | 
					            <div
 | 
				
			||||||
 | 
					              className="max-w-sm rounded overflow-hidden shadow-sm py-1 px-2 rounded mb-3 bg-gray-200">
 | 
				
			||||||
 | 
					              {r |> ReasonReact.string}
 | 
				
			||||||
 | 
					              <button
 | 
				
			||||||
 | 
					                className="bg-blue-500 hover:bg-blue-700 text-white py-1 px-2 rounded"
 | 
				
			||||||
 | 
					                onClick={e => {
 | 
				
			||||||
 | 
					                  ReactEvent.Synthetic.preventDefault(e);
 | 
				
			||||||
 | 
					                  onChange(
 | 
				
			||||||
 | 
					                    Some(
 | 
				
			||||||
 | 
					                      Value.ConditionalArray(
 | 
				
			||||||
 | 
					                        ConditionalReducer.reducer(
 | 
				
			||||||
 | 
					                          n,
 | 
				
			||||||
 | 
					                          ADD_OR_UPDATE_CONDITIONAL({
 | 
				
			||||||
 | 
					                            name: r,
 | 
				
			||||||
 | 
					                            truthValue: true,
 | 
				
			||||||
 | 
					                          }),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  );
 | 
				
			||||||
 | 
					                  ();
 | 
				
			||||||
 | 
					                }}>
 | 
				
			||||||
 | 
					                {"true" |> ReasonReact.string}
 | 
				
			||||||
 | 
					              </button>
 | 
				
			||||||
 | 
					              <button
 | 
				
			||||||
 | 
					                className="hover:bg-red-700 text-white py-1 px-2 rounded bg-red-500"
 | 
				
			||||||
 | 
					                onClick={e => {
 | 
				
			||||||
 | 
					                  ReactEvent.Synthetic.preventDefault(e);
 | 
				
			||||||
 | 
					                  onChange(
 | 
				
			||||||
 | 
					                    Some(
 | 
				
			||||||
 | 
					                      Value.ConditionalArray(
 | 
				
			||||||
 | 
					                        ConditionalReducer.reducer(
 | 
				
			||||||
 | 
					                          n,
 | 
				
			||||||
 | 
					                          ADD_OR_UPDATE_CONDITIONAL({
 | 
				
			||||||
 | 
					                            name: r,
 | 
				
			||||||
 | 
					                            truthValue: false,
 | 
				
			||||||
 | 
					                          }),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  );
 | 
				
			||||||
 | 
					                }}>
 | 
				
			||||||
 | 
					                {"false" |> ReasonReact.string}
 | 
				
			||||||
 | 
					              </button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					       |> ReasonReact.array}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  | (Conditionals(l), _) =>
 | 
				
			||||||
 | 
					    l.options |> E.A.fmap(r => r |> ReasonReact.string) |> ReasonReact.array
 | 
				
			||||||
  | (Year(_), Some(FloatPoint(r))) =>
 | 
					  | (Year(_), Some(FloatPoint(r))) =>
 | 
				
			||||||
    <input
 | 
					    <input
 | 
				
			||||||
      className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
 | 
					      className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,16 +229,17 @@ module Interface = {
 | 
				
			||||||
            }),
 | 
					            }),
 | 
				
			||||||
          (),
 | 
					          (),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
 | 
					        TypeWithMetadata.make(
 | 
				
			||||||
 | 
					          ~name="Conditional on World Ending",
 | 
				
			||||||
 | 
					          ~id="worldEnd",
 | 
				
			||||||
 | 
					          ~type_=
 | 
				
			||||||
 | 
					            Conditionals(
 | 
				
			||||||
 | 
					              Prop.Type.makeConditionals([||], [|"Foo", "Bar", "Char"|]),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          (),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
      |],
 | 
					      |],
 | 
				
			||||||
      outputTypes: [||],
 | 
					      outputTypes: [||],
 | 
				
			||||||
      run,
 | 
					      run,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
} /* )*/;
 | 
					};
 | 
				
			||||||
// TypeWithMetadata.make(
 | 
					 | 
				
			||||||
//   ~name="Conditional on World Ending",
 | 
					 | 
				
			||||||
//   ~id="worldEnd",
 | 
					 | 
				
			||||||
//   ~type_=
 | 
					 | 
				
			||||||
//     Conditionals(
 | 
					 | 
				
			||||||
//       Prop.Type.makeConditionals([||], [|"Foo", "Bar", "Char"|]),
 | 
					 | 
				
			||||||
//     ),
 | 
					 | 
				
			||||||
//   (),
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user