mosaic
  • Overview
  • Integration
    • Next.js
    • Create React App
    • Webpack
  • Getting started
    • Extensions
    • Themes
  • Tutorials
    • Mosaic + React
    • Mosaic + Webpack
  • Install an extension
    • Install a local extension
    • Install with a package manager
    • Enable or disable an extension
  • Develop an extension
    • Anatomy of an extension
    • Namespaces
    • Runtime plugins
    • Build configuration plugins
  • CRA features
    • CRACO plugins
  • Next.js features
    • Styles
    • Pages
    • Common props
  • Architecture examples
    • Router
  • Themes
    • Parent theme system
    • File shadowing
  • Experimental
    • Module preferences
    • File provisioning
  • in-depth
    • How does it work?
Powered by GitBook
On this page
  • Shadow a parent theme
  • Shadow an extension
  • Sequence of preference

Was this helpful?

  1. Themes

File shadowing

Build projects on top of projects

PreviousParent theme systemNextModule preferences

Last updated 4 years ago

Was this helpful?

Mosaic introduces the concept of shadowing (overriding) files. Shadowing is a feature of .

The shadowing mechanism will only function for files in the src and public directories your theme, parent theme or extensions.

Shadow a parent theme

  1. Create a child theme, set the mosaic.parentTheme value of its package.json to the proper parent theme. This parent theme should be into your child theme.

  2. Determine the file of the parent theme you are willing to shadow.

  3. Create a file on the same path of the child theme.

  4. functions/classes/variables which are going to be provided to the application instead of the initial ones. You may or may not use the original functionality within these values.

  5. that all of the exports of the parent theme are also exported from this file.

  1. Have a child theme created, @example/parent-theme is into it and set as mosaic.parentTheme field in the package.json

  2. Select file @example/parent-theme/src/AddToCart.component.js

  3. Create file src/AddToCart.component.js in the child theme

  4. its functionality

  5. re-exports from the child theme's file

In case the package.jsonfieldmosaic.parentThemeis empty, your theme is considered to be a root theme. In this case, parent theme overrides will not function, as there is simply no parent theme.

Shadow an extension

  1. Work with a theme, in which some extension is installed

  2. Determine the file of the extension you are willing to shadow.

  3. Create a file on the path of the child theme that is build as follows: src/<module name>/<relative path> where <relative path> is relative to the extension's src directory

  4. functions/classes/variables which are going to be provided to the application instead of the initial ones. You may or may not use the original functionality within these values.

  5. that all of the exports of the parent theme are also exported from this file.

  1. Have a theme my-theme and an extension @example/extension-1 installed into it

  2. Select a file to override: @example/extension-1/src/DataProvid

  3. Create a file on the following path: my-theme/src/@example/extension-1/DataProvider.js

  4. its functionality

  5. re-exports from the child theme's file

Caveat

If the file you created will unintentionally match extension's or parent theme's path, it will override it. Be careful not to break the functionality, while creating new files and folders.

Sequence of preference

Mosaic implements following sequence of override preference (from highest priority to lowest):

  1. Your theme's files

  2. Parent theme's files

  3. Extensions files

An extension cannot override another extension's file

themes
installed
installed
Implement
Ensure
Override
Ensure
Implement
Ensure
Override
Ensure