This package has been deprecated

Author message:

emberx packages moved to @emberx, example: @emberx/component

emberx

1.0.4 • Public • Published

glimmerx-router

Working example/E2E Test

Experimental router for glimmerx, will ship as emberx/router & emberx/route & emberx/link-to & emberx/test-helpers and emberx/string

src/index.js is the public API developers will interact with and src/routes/index.ts built as an example.

npm install && parcel index.html

API Design

What if @ember/routing/router & @ember/routing/route were a tiny and explicitly resolvable router you could import from npm. Flexible and simple API below can be progressively backward-compatible and support current ember router definitions!

import Router from 'emberx/router';
 
import IndexRoute from './routes/index/route.ts';
import PostsRoute from './routes/posts/route.ts';
import PostsIndexRoute from './routes/posts/index/route.ts';
import PostsPostRoute from './routes/posts/post/route.ts';
 
Router.SERVICES = {
  intl: new LocaleService(),
};
 
let router = Router.start([
  {
    path: '/',
    route: IndexRoute
  },
  {
    path: '/posts',
    route: PostsRoute,
    indexRoute: PostsIndexRoute
  },
  {
    path: '/posts/:slug',
    route: PostsPostRoute
  },
  {
    path: '/posts/:blog_post_id/comments',
    route: PostsPostCommentsRoute
  },
]);
 
export default router;

This API also will allow custom resolvers that can resolve current ember routers(ie. routes in Router.map(function() {})) with a specific resolver definition(classic or MUD) in future:

Backward-compatible API suggestion:

import Router from 'emberx/router';
import SomeCustomResolver from './custom-resolver';
 
Router.resolver = SomeCustomResolver;
 
let existingMapDefinition = Router.map(function () {
  this.route("public", { path: "/" }, function () {
    this.route("index", { path: "/" });
    this.route("blog-post", { path: "/:slug" });
  });
 
  this.route("admin", function () {
    this.route("index", { path: "/" });
  });
 
  this.route("settings");
  this.route("login");
});
 
let router = Router.start([
  {
    path: '/',
    route: IndexRoute
  },
  {
    path: '/posts',
    route: PostsRoute,
    indexRoute: PostsIndexRoute,
  }
], existingMapDefinition);
 
export default router;

This experiment is also a sketch/request for a new ember edition.

Familiar emberx/route:

import { hbs, tracked } from '@glimmerx/component';
import { service } from '@glimmerx/service';
import { action, on } from '@glimmerx/modifier';
 
import Route from 'emberx/route';
import LinkTo from 'emberx/link-to';
 
import t from '../helpers/t';
import Counter from '../components/Counter';
 
export default class IndexRoute extends Route {
  @service intl;
 
  @tracked dynamicObject;
 
  constructor(owner, args) {
    super(owner, args);
 
    window.setInterval(() => {
      this.dynamicObject = {
        dynamicDate: new Date().toString(),
      };
    }, 200);
  }
 
  static model(): object {
    return {
      logo: 'https://emberjs.com/images/ember-logo.svg',
      dynamicObject: { dynamicDate: new Date() },
    };
  }
 
  static template = hbs`
    <div id="intro">
      <h1>This is some route</h1>
 
      <LinkTo @route="posts.post" @model="232">Go to post 232</LinkTo>
 
      <h5>Current locale is: {{this.intl.currentLocale}}</h5>
      <button type="button" {{on "click" this.changeLocale}}>Change locale</button>
 
      <p>Localized button example:</p>
      <button type="button">{{t "button.save" this.intl}}</button>
 
 
      <img src={{this.model.logo}}/>
      <h5>Logo is {{this.model.logo}}</h5>
    </div>
 
    {{this.dynamicObject.dynamicDate}}
 
    <Counter/>
  `;
 
  @action changeLocale(): void {
    this.intl.currentLocale = this.intl.currentLocale === 'en' ? 'es' : 'en';
  }
}

This experiment is also a sketch/request for a new ember edition. Deprecates ember controllers and makes ember-specific CLI systems an option rather than requirement. Allows "npm your way to ember", from a React alternative(glimmer) to a full-fledged ember application without ember-cli.

Prerequisites

You will need the following things properly installed on your computer.

Further Reading / Useful Links

Readme

Keywords

none

Package Sidebar

Install

npm i emberx

Weekly Downloads

1

Version

1.0.4

License

MIT

Unpacked Size

61.3 kB

Total Files

38

Last publish

Collaborators

  • izelnakri