Skip to content

Commit

Permalink
basic for command
Browse files Browse the repository at this point in the history
  • Loading branch information
Austaras committed Oct 3, 2020
1 parent bb79154 commit aab37f6
Show file tree
Hide file tree
Showing 15 changed files with 3,824 additions and 120 deletions.
2 changes: 2 additions & 0 deletions bsconfig.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "retask",
"version": "0.1.0",
"namespace": true,
"sources": {
"dir" : "src",
"subdirs" : true
Expand All @@ -11,6 +12,7 @@
},
"suffix": ".bs.js",
"bs-dependencies": [
"bs-webapi",
"reason-react"
],
"warnings": {
Expand Down
12 changes: 9 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"name": "retask",
"name": "@wicke/retask",
"version": "0.1.0",
"description": "elm task but for rescript",
"main": "ReTask.bs.js",
"repository": "https://www.test.com",
"repository": "https://github.com/Austaras/retask",
"author": "austaras",
"license": "MIT",
"scripts": {
Expand All @@ -12,9 +12,15 @@
"watch": "bsb -make-world -w"
},
"dependencies": {
"bs-webapi": "^0.19.1",
"reason-react": "^0.9.1"
},
"devDependencies": {
"bs-platform": "^8.2.0"
"bs-platform": "^8.2.0",
"jest": "^26.4.2",
"react-dom": "^16.13.1"
},
"peerDependencies": {
"react": "^16.13.1"
}
}
82 changes: 35 additions & 47 deletions src/ReTask.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

81 changes: 38 additions & 43 deletions src/ReTask.re
Original file line number Diff line number Diff line change
@@ -1,58 +1,53 @@
module Cmd = {
type t('msg) =
| Cmd('msg);

type batch('msg) = array(t('msg));

let none = (): batch('msg) => [||];

let map = (fn, msg) =>
switch (msg) {
| Cmd(a) => Cmd(fn(a))
};
};

module Sub = {
type t('msg) =
| Sub('msg);

type batch('msg) = array(t('msg));

let none = (): batch('msg) => [||];

let map = (fn, msg) =>
switch (msg) {
| Sub(a) => Sub(fn(a))
};
};
open Type;
open Util;

type config('model, 'msg) = {
init: ('model, Cmd.t('msg)),
update: ('msg, 'model) => ('model, Cmd.t('msg)),
sub: 'model => Sub.t('msg),
sub: 'model => Cmd.t('msg),
};

let useReducerT = config => {
let {init, update, sub} = config;
let update = React.useCallback1((state, action) => {
let (state, _) = state;
update(state, action);
}, [|update|]);
React.useEffect1(
() => {
Js.log(123);
None;
},
[|sub|],
);
let ((state, cmd), action) = React.Uncurried.useReducer(update, init);
let cancel = React.useRef({queue: Js.Dict.empty(), id: 0});
let (res, dispatch) = React.Uncurried.useReducer(any_cast(update), init);
let (state, cmd) = res;

React.useEffect1(
() => {
Js.log(123);
let makeRegister: makeRegister('a) =
() => {
let id = cancel.current.id |> string_of_int;
cancel.current.id = cancel.current.id + 1;

(
(. action) => {
dispatch(. action);
Dict.delete(cancel.current.queue, id);
},
cb => Js.Dict.set(cancel.current.queue, id, cb),
);
};
cmd(. makeRegister);
None;
},
[|cmd|],
[|res|],
);
(state, action);

React.useEffect0(() => Some(() => cancel.current.queue |> Dict.values |> Js.Array.forEach(f => f())));
(state, dispatch);
};

// module Comp = {
// type config('model, 'msg) = {
// init: ('model, Cmd.t),
// update: ('msg, 'model) => ('model, Cmd.t),
// sub: 'model => Sub.t('msg),
// view: ('model, (. 'msg) => unit) => React.element,
// };

// let make = ({init, update, sub, view}) => {
// let (model, dispatch) = useReducerT({init, update, sub});
// view(model, dispatch);
// };
// };
22 changes: 0 additions & 22 deletions src/ReTaskEffect.bs.js

This file was deleted.

5 changes: 0 additions & 5 deletions src/ReTaskEffect.re

This file was deleted.

22 changes: 22 additions & 0 deletions src/cmd.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions src/cmd.re
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
open Type;

type t('a) = (. makeRegister('a)) => unit;

let none: t('a) = (. _) => ();

let batch = (cmds: array(t('a))): t('a) => (. make) => cmds |> Js.Array.forEach(f => f(. make));
59 changes: 59 additions & 0 deletions src/time.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions src/time.re
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
open Js.Global;
open Webapi;

let delay: (unit => 'a, int) => Cmd.t('a) =
(ctor, delay) =>
(. make) => {
let (fulfil, cancel) = make();
let id = setTimeout(() => fulfil(. ctor()), delay);
cancel(() => clearTimeout(id));
};

let delayFloat: (unit => 'a, float) => Cmd.t('a) =
(ctor, delay) =>
(. make) => {
let (fulfil, cancel) = make();
let id = setTimeoutFloat(() => fulfil(. ctor()), delay);
cancel(() => clearTimeout(id));
};

let nextFrame = ctor =>
(. make) => {
let (fulfil, cancel) = make();
let id = requestCancellableAnimationFrame(time => fulfil(. ctor(time)));
cancel(() => cancelAnimationFrame(id));
};

let every = 10;
let everyFloat = 10.0;
2 changes: 2 additions & 0 deletions src/type.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit aab37f6

Please sign in to comment.