NetanelBasal / ngrx-generator

ngrx templates generator
MIT License
130 stars 26 forks source link

Add namespaces to actions and reducer #2

Open farin99 opened 7 years ago

farin99 commented 7 years ago

Cool library! Did you consider adding a namespace for the .actions.ts and .reducer.ts generated files. e.g.,

teams.actions.ts file will have:

import { Action } from '@ngrx/store';

export namespace TeamUsersActions{
  export const LOAD =                 '[Team Users] Load';
  export const LOAD_SUCCESS =         '[Team Users] Load Success';
  export const LOAD_FAIL =            '[Team Users] Load Fail';
  /**
   * Load Team Users Actions
   */
  export class LoadAction implements Action {
    readonly type = LOAD;
  }

  export class LoadSuccessAction implements Action {
    readonly type = LOAD_SUCCESS;

    constructor(public payload: any) { }
  }

  export class LoadFailAction implements Action {
    readonly type = LOAD_FAIL;

    constructor(public payload: any) { }
  }

  export type Actions =
    | LoadAction
    | LoadSuccessAction
    | LoadFailAction;
}

Then you can use it as:

import {TeamUsersActions} from "./team-users.actions";
TeamUsersActions.LoadAction() and TeamUsersActions.Actions etc.
NetanelBasal commented 7 years ago

So you are saving the * as syntax, but I think the compiler generates more code in your example, can you check it, please?

farin99 commented 7 years ago

It actually seems to create less code 👍 :)

Compiled Code: With namespace (1619 characters)

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shared_services_utils__ = __webpack_require__(83);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TeamUsersActions; });

var TeamUsersActions;
(function (TeamUsersActions) {
    TeamUsersActions.LOAD = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shared_services_utils__["a" /* type */])('[Team Users] Load');
    TeamUsersActions.LOAD_SUCCESS = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shared_services_utils__["a" /* type */])('[Team Users] Load Success');
    TeamUsersActions.LOAD_FAIL = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shared_services_utils__["a" /* type */])('[Team Users] Load Fail');
    /**
     * Load Team Users Actions
     */
    var LoadAction = (function () {
        function LoadAction() {
            this.type = TeamUsersActions.LOAD;
        }
        return LoadAction;
    }());
    TeamUsersActions.LoadAction = LoadAction;
    var LoadSuccessAction = (function () {
        function LoadSuccessAction(payload) {
            this.payload = payload;
            this.type = TeamUsersActions.LOAD_SUCCESS;
        }
        return LoadSuccessAction;
    }());
    TeamUsersActions.LoadSuccessAction = LoadSuccessAction;
    var LoadFailAction = (function () {
        function LoadFailAction(payload) {
            this.payload = payload;
            this.type = TeamUsersActions.LOAD_FAIL;
        }
        return LoadFailAction;
    }());
    TeamUsersActions.LoadFailAction = LoadFailAction;
})(TeamUsersActions || (TeamUsersActions = {}));

without (1716 characters):

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shared_services_utils__ = __webpack_require__(83);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return LOAD; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return LOAD_SUCCESS; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return LOAD_FAIL; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoadAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return LoadSuccessAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return LoadFailAction; });

var LOAD = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shared_services_utils__["a" /* type */])('[Team Users] Load');
var LOAD_SUCCESS = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shared_services_utils__["a" /* type */])('[Team Users] Load Success');
var LOAD_FAIL = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shared_services_utils__["a" /* type */])('[Team Users] Load Fail');
/**
 * Load Team Users Actions
 */
var LoadAction = (function () {
    function LoadAction() {
        this.type = LOAD;
    }
    return LoadAction;
}());

var LoadSuccessAction = (function () {
    function LoadSuccessAction(payload) {
        this.payload = payload;
        this.type = LOAD_SUCCESS;
    }
    return LoadSuccessAction;
}());

var LoadFailAction = (function () {
    function LoadFailAction(payload) {
        this.payload = payload;
        this.type = LOAD_FAIL;
    }
    return LoadFailAction;
}());
NetanelBasal commented 7 years ago

That's interesting! The problem is that many people started writing their applications according to the ngrx official example which is the way I support it. I will examine the matter, and when I have time, I will try to create an option for what you are offering. Thanks.