Skip to content

yoyomo/muvjs-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MUVisJS example

Both Modular and Static Examples of MuvJS

Setup

Clone the repository

git clone git@github.com:yoyomo/muvjs-example.git
cd muvjs-example

Run the commands

npm i
npm start

Visit http://localhost:8080,

and then update App.mjs to your liking

Example

App.mjs

"use strict";
import {div, button} from 'muvjs/muv-dom';

// MODEL

export const model =
  {
    count: 0
  };

// UPDATE

const Increment = "increment";
const increment = () => {
  return {
    type: Increment
  }
};

const Decrement = "decrement";
const decrement = () => {
  return {
    type: Decrement
  }
};

const CompleteRequest = "complete-request";
const completeRequest = (xhr) => {
  return {
    type: CompleteRequest,
    xhr
  }
};

const SignIn = "sign-in";
const signIn = () => {
  return {
    type: SignIn
  }
};

export const update = model => action => {
  let effects = [];
  switch (action.type) {
    case Increment:
      model = { ...model };
      model.count = model.count + 1;
      break;

    case Decrement:
      model = { ...model };
      model.count = model.count - 1;
      break;

    case CompleteRequest:
      console.log("Request Completed: ", action.xhr.responseText);
      break;

    case SignIn:
      effects = effects.concat(makeRequest());
      break;
  }
  return {model, effects};
};

// VIEW 

export const view = dispatch => model =>
  div()(
    [
      , button({ onclick: () => dispatch(decrement()) })('-')
      , div()(model.count)
      , button({ onclick: () => dispatch(increment()) })('+')
    ]
  );

Optionally you can add these two functions (After v2)

//IGNITION

export const ignition = dispatch => {
dispatch(signIn());
};

//SUBSCRIPTIONS

const AjaxRequest = "ajax-request";
const makeRequest = () => {
return {
  type: AjaxRequest
}
};

export const subscriptions = dispatch => effect => {
switch (effect.type) {
  case AjaxRequest:
    let xhr = new XMLHttpRequest();
    xhr.open("GET", "http://localhost:8080", true);

    xhr.onload = () => {
      dispatch(completeRequest(xhr));
    };

    xhr.setRequestHeader('Accept', 'application/json');
    xhr.setRequestHeader('Content-Type', 'application/json');

    xhr.send({});
    break;
}


};

index.mjs including model,update,view, and the now optional functions ignition and subscriptions

'use strict';

import {muv} from 'muvjs/muv';
import {model, update, view, ignition, subscriptions} from './App';

muv({model, update, view, ignition, subscriptions})('root');

index.html

<!DOCTYPE html>
<html>
<body>
  
<div id='root'></div>
<script type='module' src='index.mjs'></script>

</body>
</html>

Typescript

Clone the repository ts

Create MuvJS App

You can now use a brew command to create a MuvJS app from scratch: https://github.com/yoyomo/create-muvjs-app

About

Both Modular and Static Examples of MuvJS

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors