@aappddeevv/dynamics-client-ui

## What is it? A library to help you create great dynamics applications.

Usage no npm install needed!

<script type="module">
  import aappddeevvDynamicsClientUi from 'https://cdn.skypack.dev/@aappddeevv/dynamics-client-ui';
</script>

README

dynamics-client-ui

What is it?

A library to help you create great dynamics applications.

The library contains utilities and UI components, written in typescript and react but directly usable from javascript.

Some parts:

  • Robust web api client and data management interfaces proven in multiple applications.
  • Robust metadata client, caching.
  • Dynamics react wrapper component, provides an XRM, user message notifier and other supporting components
  • EntityForm react wrapper component, acts like a redux store. Supports "new" and "existing" form control.
  • EventBus for coordinating different web components in a master-detail fashion.
  • FormContextHolder to properly obtain a form context and make it available to WebResources.
  • HTML traditional/UCI UI utilities to help your UI work in any environment
  • SortedDetailsList react components for displaying tabular data nicely. Based on office-fabric-ui-react.
  • Misc react components for UI construction
  • Redux combineReducers that provides the full state to all reducers.
  • ...and more...

Using

Install using npm:

npm install install --save @aappddeevv/dynamics-client-ui

If you wish to use the library in development mode, just link it with npm. The library build is still under construction but it is usable if you use npm link. After cloning:

cd dynamics-client-ui
npm run build
npm link
cd ../yourapp
npm link dynamics-client-ui

The library does creates a typescript parsed output distribution so you can use the module like any other.

Transpiling down to js/.d.ts files is quite popular, but I am not sure that's the best way to publish if you assume that the consumers are all using typescript. It may be critical to transpile CSS files though into something more digestable so that you do not need to use the same CSS loader bundling configuration as dynamics-client-cli. There are some office-fabric-ui-react building blocks as well, for example, providing a sortable, nice looking DetailsList you can use to list and interact with data in a master-detail interaction model.

You will need to define the module BuildSettings to be a module that exports a few constants. See config/README.md for details.

The CSS is currently written using cssnext. If you use webpack for bundling, the postcss configuration that should work is:

const finalStyleLoaders = [
    { loader: "style-loader" },
    { loader: "css-loader", options: { modules: true, importLoaders: 1 } },
    { loader: "postcss-loader",
      options: {
          ident: 'postcss',
          plugins: (loader) => [
              require("postcss-import")({root: loader.resourcePath}),
              require("postcss-mixins")(),
              require("postcss-cssnext")(),
              require("postcss-reporter")({clearMessages: true}),
          ] }}
]

I mention this because most libraries give you a single version of CSS to use or pass along the LESS/SCSS files. Using this loader is the equivalent of providing you the sources.

Documentation

I am working on publishing API documentation but am not quite there yet.