Compare commits

..

No commits in common. "master" and "v0.5" have entirely different histories.
master ... v0.5

17 changed files with 229 additions and 629 deletions

View File

@ -0,0 +1,45 @@
name: build-develop-branch
run-name: ${{ github.actor }} is learning GitHub Actions
on:
push:
jobs:
build-branch:
if: ${{ startsWith(github.ref_name, 'develop-') }}
runs-on: ubuntu-latest
steps:
# https://github.com/RouxAntoine/checkout/tree/v3.5.4
- uses: RouxAntoine/checkout@v3.5.4
- uses: actions/setup-node@v3
with:
node-version: '20'
- uses: https://github.com/gilesbradshaw/batch2yaml@master
with:
action: xml
path: '.'
- name: get PR number
run: |
echo ::set-env name=PR||${./tea pr ls -f=base,head,index | grep "| master | firstString=${{ github.ref_name }} |" | tr -d ' ' | tr "|" "\n" | head -n 4 | tail -1}
- name: get build branch name
run: |
firstString=${{ github.ref_name }}
secondString="build-"
echo ::set-env name=BUILD_BRANCH::${firstString/develop-/"$secondString"}
- name: GIT commit and push all changed files
env:
CI_COMMIT_MESSAGE: Continuous Integration Build Artifacts
CI_COMMIT_AUTHOR: Continuous Integration
run: |
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}"
git config --global user.email "username@users.noreply.github.com"
git checkout -b ${{ env.BUILD_BRANCH }}
git add -A
git commit -a -m "${{ env.CI_COMMIT_MESSAGE }} ym files converted to xml"
git push -f origin HEAD:${{ env.BUILD_BRANCH }}
- name: make pull request comment
run: |
curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output tea
chmod +x ./tea
./tea login add -n=this --url=${{ github.server_url}} -t=${{ secrets.TEA_TOKEN }}
./tea c $PR "ohhhh i see!!!"

View File

@ -1,87 +0,0 @@
name: convert-to-yml
run-name: ${{ github.actor }} is learning GitHub Actions
on:
push:
branches:
- 'build/**'
jobs:
develop-branch:
runs-on: ubuntu-latest
steps:
# https://github.com/RouxAntoine/checkout/tree/v3.5.4
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
fetch-depth: '10'
- uses: http://sigyl.com:3000/actions/setup-node@v3
with:
node-version: '20'
- run: git fetch
- env: env
run: printenv
- uses: http://sigyl.com:3000/actions/batch2yaml@master
with:
action: yml
path: '.'
- name: get development branch name
run: |
firstString=${{ github.ref_name }}
secondString="develop"
echo ::set-env name=DEVELOPMENT_BRANCH::${firstString/build\//"$secondString"\/}
- name: config
run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.event.pusher.email }}"
- name: commit
run: |
git add -A
git commit -a -m "${{ github.ref_name }} -> ${{ env.DEVELOPMENT_BRANCH }}"
- name: status
run: |
git branch -r
echo $(git branch -r | grep -Fx " origin/${{ env.DEVELOPMENT_BRANCH }}" | wc -c)
- name: push
run: |
if [[ $(git branch -r | grep -Fx " origin/${{ env.DEVELOPMENT_BRANCH }}" | wc -c) -eq 0 ]]; then
ls
git log -5
git status
git rebase -Xtheirs origin/master
ls
git log -4
git status
echo no development branch so pushing
git push origin HEAD:${{ env.DEVELOPMENT_BRANCH }};
curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output tea;
chmod +x ./tea;
./tea login add -n=this --url=${{ github.server_url}} -t=${{ secrets.BOT_TOKEN }};
if [[ $(./tea pr ls -f=base,head -o=csv | grep grep "\"master\",\"${{ env.DEVELOPMENT_BRANCH }}\"" | head -c1 | wc -c) -eq 0 ]]; then
./tea pr c --base=master --head=${{ env.DEVELOPMENT_BRANCH }} --description="
development pull request
this PR is instigated by and will been built on [${{ github.ref_name }}](${{ github.serverUrl }}/${{ github.repository }}/src/branch/${{ env.BUILD_BRANCH }})
" -t="WIP: ${{ github.event.head_commit.message }}"
fi
echo 'pushed new branch and created pr';
else
if [[ $(git diff origin/${{ env.DEVELOPMENT_BRANCH }} | wc -c) -ne 0 ]]; then
#git rebase -Xtheirs origin/${{ env.DEVELOPMENT_BRANCH }}
git clone ${{ github.serverUrl }}/${{ github.repository }} ../cloned
git -C ../cloned fetch origin #--depth=1
git -C ../cloned checkout $DEVELOPMENT_BRANCH || git -C ../cloned checkout -b $DEVELOPMENT_BRANCH
mv ../cloned/.git ..
rm -rf ../cloned
cp -r . ../cloned
rm -rf ../cloned/.git
mv ../.git ../cloned
mv .git/config ../cloned/.git
rm -r ./*
rm -r .git
mv ../cloned/* .
mv ../cloned/.git .
git add -A
git commit -a -m "${{ github.ref_name }} -> ${{ env.DEVELOPMENT_BRANCH }}"
git push origin HEAD:${{ env.DEVELOPMENT_BRANCH }};
else
echo 'no changes so no push'
fi;
fi

View File

@ -0,0 +1,21 @@
name: Bump version
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: RouxAntoine/checkout@v3.5.4
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v6.1
with:
github_token: ${{ secrets.TEA_TOKEN }}
- name: Create a GitHub release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.tag_version.outputs.new_tag }}
name: Release ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.tag_version.outputs.changelog }}

View File

@ -1,13 +0,0 @@
name: Changelog
on:
release:
types:
- created
jobs:
changelog:
runs-on: ubuntu-20.04
steps:
- name: "✏️ Generate release changelog"
uses: heinrichreimer/action-github-changelog-generator@v2.3
with:
token: ${{ secrets.BOT_TOKEN }}

View File

@ -8,27 +8,24 @@ jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
fetch-depth: '10'
- uses: RouxAntoine/checkout@v3.5.4
- name: ls
run: ls
- uses: actions/setup-node@v3
with:
node-version: '20'
- uses: http://sigyl.com:3000/actions/batch2yaml@master
- uses: https://github.com/gilesbradshaw/batch2yaml@master
with:
action: xml
path: '.'
- name: GIT commit and push all changed files
env:
CI_COMMIT_MESSAGE: approved yml conveted to xml.
CI_COMMIT_MESSAGE: Continuous Integration Build Artifacts
CI_COMMIT_AUTHOR: Continuous Integration
run: |
echo ${{ github.ref_name }}
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}"
git config --global user.email "username@users.noreply.github.com"
git add -A
git commit -a -m "${{ github.ref_name }} -> refs/heads/deployed/${{ github.ref_name }} "
git push -f origin HEAD:refs/heads/deployed/${{ github.ref_name }}
git commit -a -m "${{ env.CI_COMMIT_MESSAGE }} yml files converted to xml"
git push -f origin HEAD:deployed-${{ github.ref_name }}

View File

@ -0,0 +1,46 @@
name: convert-to-yml
run-name: ${{ github.actor }} is learning GitHub Actions
on:
push:
jobs:
develop-branch:
if: ${{ startsWith(github.ref_name, 'format-') }}
runs-on: ubuntu-latest
steps:
# https://github.com/RouxAntoine/checkout/tree/v3.5.4
- uses: RouxAntoine/checkout@v3.5.4
- uses: actions/setup-node@v3
with:
node-version: '20'
- uses: https://github.com/gilesbradshaw/batch2yaml@master
with:
action: yml
path: '.'
- name: get production branch name
run: |
firstString=${{ github.ref_name }}
secondString="develop-"
echo ::set-env name=PRODUCTION_BRANCH::${firstString/format-/"$secondString"}
- name: GIT commit and push all changed files
env:
CI_COMMIT_MESSAGE: Continuous Integration Build Artifacts
CI_COMMIT_AUTHOR: Continuous Integration
run: |
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}"
git config --global user.email "username@users.noreply.github.com"
git config pull.rebase false
git checkout -b ${{ env.PRODUCTION_BRANCH }}
git add -A
git commit -a -m "${{ env.CI_COMMIT_MESSAGE }} xml files converted to yml"
git push -f origin HEAD:${{ env.PRODUCTION_BRANCH }}
git fetch
git merge origin/master --allow-unrelated-histories --strategy-option=ours
git push origin HEAD:${{ env.PRODUCTION_BRANCH }}
- name: make pull request
run: |
curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output tea
chmod +x ./tea
./tea login add -n=this --url=${{ github.server_url}} -t=${{ secrets.TEA_TOKEN }}
if [[ $(./tea pr ls -f=base,head | grep "| master | ${{ env.PRODUCTION_BRANCH }} |" | head -c1 | wc -c) -eq 0 ]]; then
./tea pr c --base=master --head=${{ env.PRODUCTION_BRANCH }} --description="development pull request" -t="WIP: ${{ github.event.head_commit.message }}"
fi

View File

@ -1,89 +0,0 @@
name: build-develop-branch
run-name: ${{ github.actor }} is learning GitHub Actions
on:
push:
branches:
- 'develop/**'
jobs:
build-branch:
runs-on: ubuntu-latest
steps:
# https://github.com/RouxAntoine/checkout/tree/v3.5.4
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
fetch-depth: '10'
- env: env
run: printenv
- name: get tea
run: |
curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output ../tea
chmod +x ../tea
../tea login add -n=this --url=${{ github.server_url}} -t=${{ secrets.BOT_TOKEN }}
- uses: http://sigyl.com:3000/actions/setup-node@v3
with:
node-version: '20'
- uses: http://sigyl.com:3000/actions/batch2yaml@master
with:
action: xml
path: '.'
- run: git fetch
- name: config
run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.event.pusher.email }}"
- name: get build branch name
run: |
firstString=${{ github.ref_name }}
secondString="build"
echo ::set-env name=BUILD_BRANCH::${firstString/develop\//"$secondString"\/}
- name: status
run: |
ls
- name: push
run: |
git add -A
git commit -a -m "${{ github.ref_name }} -> ${{ env.BUILD_BRANCH }} "
if [[ $(git branch -r | grep -Fx " origin/${{ env.BUILD_BRANCH }}" | wc -c) -eq 0 ]]; then
git push origin HEAD:${{ env.BUILD_BRANCH }};
else
if [[ $(git diff origin/${{ env.BUILD_BRANCH }} | wc -c) -ne 0 ]]; then
#git rebase -Xtheirs origin/${{ env.BUILD_BRANCH }}
git clone ${{ github.serverUrl }}/${{ github.repository }} ../cloned
git -C ../cloned fetch origin #--depth=1
git -C ../cloned checkout $BUILD_BRANCH || git -C ../cloned checkout -b $BUILD_BRANCH
mv ../cloned/.git ..
rm -rf ../cloned
cp -r . ../cloned
rm -rf ../cloned/.git
mv ../.git ../cloned
mv .git/config ../cloned/.git
rm -r ./*
rm -r .git
mv ../cloned/* .
mv ../cloned/.git .
git add -A
git commit -a -m "${{ github.ref_name }} -> ${{ env.BUILD_BRANCH }} "
git push origin HEAD:${{ env.BUILD_BRANCH }}
else
echo 'no changes so no push'
fi;
fi;
- name: make PR
run: |
../tea pr ls -f=base,head -o=csv
if [[ $(../tea pr ls -f=base,head -o=csv | grep "\"master\",\"${{ github.ref_name }}\"" | head -c1 | wc -c) -eq 0 ]]; then
../tea pr c --base=master --head=${{ github.ref_name }} --description="
development pull request
this PR is will been built on [${{ github.ref_name }}](${{ github.serverUrl }}/${{ github.repository }}/src/branch/${{ env.BUILD_BRANCH }})
" -t="WIP: ${{ github.event.head_commit.message }}"
fi
- name: get PR number
run: |
pr=$(../tea pr ls -f=base,head,index -o csv | grep "\"master\",\"${{ github.ref_name }}\"" | tr -d ' ' | tr "," "\n" | head -n 4 | tail -1)
export PR="${pr//[\"\'\`]/}"
echo ::set-env name=PR::$PR
- name: make pull request comment
run: |
../tea c $PR "this branch has been built on [${{ env.BUILD_BRANCH }}](${{ github.serverUrl }}/${{ github.repository }}/src/branch/${{ env.BUILD_BRANCH }})"

View File

@ -1,35 +0,0 @@
name: build-develop-branch
run-name: ${{ github.actor }} is learning GitHub Actions
on:
pull_request:
types:
- closed
- deleted
branches:
- master
jobs:
delete-develop:
if: ${{ ! startsWith(github.head_ref, 'develop/') }}
runs-on: ubuntu-latest
steps:
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
- name: delete develop branch
id: delete_develop_branch
run: git push origin --delete ${{ github.head_ref }}
continue-on-error: true
- uses: mainmatter/continue-on-error-comment@v1
with:
repo-token: ${{ secrets.BOT_TOKEN }}
outcome: ${{ steps.delete_develop_branch.outcome }}
test-id: Error code ${{ matrix.code }}
- name: get build branch name
run: |
firstString=${{ github.head_ref }}
secondString="build"
echo ::set-env name=BUILD_BRANCH::${firstString/develop\//"$secondString"\/}s
- name: delete build branch
run: git push origin --delete ${{ env.BUILD_BRANCH }}

View File

@ -1,24 +0,0 @@
name: master-pushed
run-name: ${{ github.actor }} is learning GitHub Actions
on:
push:
branches:
- 'master'
jobs:
new release:
runs-on: ubuntu-latest
steps:
- name: get tea
run: |
curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output ../tea
chmod +x ../tea
../tea login add -n=this --url=${{ github.server_url}} -t=${{ secrets.BOT_TOKEN }}
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
- name: bump release
run: |
export version=$(../tea r ls -o=simple | head -n 1 | tr " " "\n" | head -n 1 | awk -F. '{$NF = $NF + 1;} 1' | sed 's/ /./g')
../tea r c --note="this isrelease ${version}" --tag=${version} --title=${version} --target=${{ github.sha }}
echo ::set-env name=VERSION::$version

View File

@ -1,54 +0,0 @@
name: pr-open
run-name: ${{ github.actor }} is learning GitHub Actions
on:
pull_request:
types:
- reopened
branches:
- 'master'
jobs:
build-branch:
runs-on: ubuntu-latest
steps:
# https://github.com/RouxAntoine/checkout/tree/v3.5.4
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
- uses: http://sigyl.com:3000/actions/setup-node@v3
with:
node-version: '20'
- uses: http://sigyl.com:3000/actions/batch2yaml@master
with:
action: xml
path: '.'
- name: get PR number
run: |
curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output tea
chmod +x ./tea
./tea login add -n=this --url=${{ github.server_url}} -t=${{ secrets.BOT_TOKEN }}
echo ::set-env name=PR::$(./tea pr ls -f=base,head,index | grep "| master | ${{ github.ref_name }} |" | tr -d ' ' | tr "|" "\n" | head -n 4 | tail -1)
rm ./tea
- name: get build branch name
run: |
firstString=${{ github.ref_name }}
secondString="build"
echo ::set-env name=BUILD_BRANCH::${firstString/develop\//"$secondString"\/}
- name: GIT commit and push all changed files
env:
CI_COMMIT_MESSAGE: Reopened PR copnverted to xml.
CI_COMMIT_AUTHOR: Continuous Integration
run: |
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}"
git config --global user.email "username@users.noreply.github.com"
git checkout -b ${{ env.BUILD_BRANCH }}
git add -A
git commit -a -m "${{ env.CI_COMMIT_MESSAGE }} yml files converted to xml"
git push origin HEAD:${{ env.BUILD_BRANCH }}
- name: make pull request comment
run: |
curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output tea
chmod +x ./tea
./tea c $PR "this branch has been built on [${{ env.BUILD_BRANCH }}](${{ github.serverUrl }}/${{ github.repository }}/src/branch/${{ env.BUILD_BRANCH }})"

View File

@ -1,23 +0,0 @@
on:
pull_request:
branches: [master]
jobs:
prettier:
runs-on: ubuntu-latest
steps:
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
# Make sure the actual branch is checked out when running on pull requests
ref: ${{ github.head_ref }}
# This is important to fetch the changes to the previous commit
fetch-depth: 0
- name: Prettify code
uses: creyD/prettier_action@v4.3
with:
# This part is also where you can pass other options, for example:
prettier_options: --write **/*.{js,md}
only_changed: true

View File

@ -1,28 +0,0 @@
name: tea
on:
workflow_call:
secrets:
token:
required: true
jobs:
tea:
runs-on: ubuntu-latest
steps:
- name: get tea
run: |
echo tea please!
#curl https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-386 --output ../tea
#chmod +x ../tea
#../tea login add -n=this --url=${{ github.server_url}} -t=${{ secrets.token }}
#echo thank you!
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: http://sigyl.com:3000/actions/checkout@v3.5.4
with:
token: ${{ secrets.BOT_TOKEN }}
fetch-depth: '10'
- name: ls
run: ls

204
README.md
View File

@ -1,100 +1,104 @@
# batch-example
This repository will store and allow versioning and approval of a batch configuration.
This repository **only** contains exported configuration. It does not contain any binary files (eg equipment-model.cfg nor system state or log files). These are excluded using the **.gitignore** file.
## change process
tea is here (i had to change docker file to just be based on node:latest)
https://gitea.com/gitea/tea/src/branch/main/docs/CLI.md
On ?tag ? push to master
clone master
branch deployed
yml -> xml
push deployed
pull to production PC and import
pull to development, import, modify, export
push from development to format branch
on format-branch pull, xml -> yml, push to product-development and PR
### FTBatch development pc on development branch
```sh
?git branch -D format-branch
git checkout format-branch
git merge deployed
```
make changes and export files
commit and push back to server
```sh
git add -A
git commit
git push origin format-branch
```
### format-bot pc
```sh
git branch -D format-branch
git fetch origin
git checkout -b format-branch
git checkout master
git pull
git branch -D product-development
git checkout -b product-development
git merge --squash --no-commit --no-ff --strategyoption=theirs format-branch
```
run the formatter
```sh
git add -A
git commit
git push origin product-development
git push origin --delete format-branch
```
create a pull request
```sh
git fetch --tags
gotea pr c --base=master --head=product-development --repo another-user/batch-example --title="WIP: this is a PR! it rocks!"
```
closing a pull request (not used)
```sh
gotea pr close --repo another-user/batch-example 11
```
build
```sh
git checkout master
git pull
git checkout deployed
git merge master
```
make xml files
```sh
git add -A
git commit
git push origin deployed
```
# batch-example
This repository will store and allow versioning and approval of a batch configuration.
This repository **only** contains exported configuration. It does not contain any binary files (eg equipment-model.cfg nor system state or log files). These are excluded using the **.gitignore** file.
## change process
tea is here (i had to change docker file to just be based on node:latest)
https://gitea.com/gitea/tea/src/branch/main/docs/CLI.md
On ?tag ? push to master
clone master
branch deployed
yml -> xml
push deployed
pull to production PC and import.
pull to development, import, modify, export
push from development to format branch
on format-branch pull, xml -> yml, push to product-development and PR
### FTBatch development pc on development branch
```sh
?git branch -D format-branch
git checkout format-branch
git merge deployed
```
make changes and export files
commit and push back to server
```sh
git add -A
git commit
git push origin format-branch
```
### format-bot pc
```sh
git branch -D format-branch
git fetch origin
git checkout -b format-branch
git checkout master
git pull
git branch -D product-development
git checkout -b product-development
git merge --squash --no-commit --no-ff --strategyoption=theirs format-branch
```
run the formatter
```sh
git add -A
git commit
git push origin product-development
git push origin --delete format-branch
```
create a pull request
```sh
git fetch --tags
gotea pr c --base=master --head=product-development --repo another-user/batch-example --title="WIP: this is a PR! it rocks!"
```
closing a pull request (not used)
```sh
gotea pr close --repo another-user/batch-example 11
```
build
```sh
git checkout master
git pull
git checkout deployed
git merge master
```
make xml files
```sh
git add -A
git commit
git push origin deployed
```

View File

@ -6,13 +6,13 @@
SchemaVersion: '71'
- Version: '1.00'
- Area:
- UniqueName: AREA1444
- UniqueName: AREA1
- EnumerationSet:
- UniqueName: YES_NO
- Type: '1'
- Member:
- Name: YES
- Ordinal: '19'
- Ordinal: '1'
- Member:
- Name: NO
- Ordinal: '0'
@ -21,7 +21,7 @@
- Type: '0'
- EnumerationSet:
- UniqueName: $TIMER_TYPE
- Type: '13'
- Type: '1'
- Member:
- Name: COUNT_DOWN
- Ordinal: '0'
@ -124,7 +124,7 @@
- Name: Begin Approvals
- Id: '-1'
- StepOrder: '1'
- Required: 1q
- Required: '1'
- ApproveSignatureTemplateName: null
- RevertSignatureTemplateName: null
- Description: Used to formally begin the approval process.
@ -135,9 +135,9 @@
- Required: '0'
- ApproveSignatureTemplateName: null
- RevertSignatureTemplateName: null
- Description: Confirmation by the author of the recipe tgabghatcdcscsvdsvdsvsxsxsdit is ready for h v vredcdview.s...gfhhh....
- Description: Confirmation by the author of the recipe that it is ready for review.s...hhh....
- RecipeApprovalStep:
- Name: Reviqedcdw Recipe
- Name: Review Recipe
- Id: '-3'
- StepOrder: '3'
- Required: '0'

View File

@ -17,7 +17,7 @@
- Name: NO
- Ordinal: '0'
- EnumerationSet:
- UniqueName: PHASE_FAILURESzx
- UniqueName: PHASE_FAILURES
- Type: '0'
- EnumerationSet:
- UniqueName: $TIMER_TYPE
@ -135,7 +135,7 @@
- Required: '0'
- ApproveSignatureTemplateName: null
- RevertSignatureTemplateName: null
- Description: Confirmation by the author of the recipe that it is readybg f review.s...hhh....
- Description: Confirmation by the author of the recipe that it is ready for review.s...hhh....
- RecipeApprovalStep:
- Name: Review Recipe
- Id: '-3'

BIN
tea Executable file

Binary file not shown.

160
try.js
View File

@ -1,160 +0,0 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import * as React from "react";
import ReactVersion from "shared/ReactVersion";
import { LegacyRoot } from "react-reconciler/src/ReactRootTags";
import {
createContainer,
updateContainer,
injectIntoDevTools,
} from "react-reconciler/src/ReactFiberReconciler";
import Transform from "art/core/transform";
import Mode from "art/modes/current";
import FastNoSideEffects from "art/modes/fast-noSideEffects";
import { TYPES, childrenAsString } from "./ReactARTInternals";
Mode.setCurrent(
// Change to 'art/modes/dom' for easier debugging via SVG
FastNoSideEffects,
);
/** Declarative fill-type objects; API design not finalized */
const slice = Array.prototype.slice;
class LinearGradient {
constructor(stops, x1, y1, x2, y2) {
this._args = slice.call(arguments);
}
applyFill(node) {
node.fillLinear.apply(node, this._args);
}
}
class RadialGradient {
constructor(stops, fx, fy, rx, ry, cx, cy) {
this._args = slice.call(arguments);
}
applyFill(node) {
node.fillRadial.apply(node, this._args);
}
}
class Pattern {
constructor(url, width, height, left, top) {
this._args = slice.call(arguments);
}
applyFill(node) {
node.fillImage.apply(node, this._args);
}
}
/** React Components */
class Surface extends React.Component {
componentDidMount() {
const { height, width } = this.props;
this._surface = Mode.Surface(+width, +height, this._tagRef);
this._mountNode = createContainer(
this._surface,
LegacyRoot,
null,
false,
false,
"",
);
updateContainer(this.props.children, this._mountNode, this);
}
componentDidUpdate(prevProps, prevState) {
const props = this.props;
if (props.height !== prevProps.height || props.width !== prevProps.width) {
this._surface.resize(+props.width, +props.height);
}
updateContainer(this.props.children, this._mountNode, this);
if (this._surface.render) {
this._surface.render();
}
}
componentWillUnmount() {
updateContainer(null, this._mountNode, this);
}
render() {
// This is going to be a placeholder because we don't know what it will
// actually resolve to because ART may render canvas, vml or svg tags here.
// We only allow a subset of properties since others might conflict with
// ART's properties.
const props = this.props;
// TODO: ART's Canvas Mode overrides surface title and cursor
const Tag = Mode.Surface.tagName;
return (
<Tag
ref={(ref) => (this._tagRef = ref)}
accessKey={props.accessKey}
className={props.className}
draggable={props.draggable}
role={props.role}
style={props.style}
tabIndex={props.tabIndex}
title={props.title}
/>
);
}
}
class Text extends React.Component {
constructor(props) {
super(props);
// We allow reading these props. Ideally we could expose the Text node as
// ref directly.
["height", "width", "x", "y"].forEach((key) => {
Object.defineProperty(this, key, {
get: function () {
return this._text ? this._text[key] : undefined;
},
});
});
}
render() {
// This means you can't have children that render into strings...
const T = TYPES.TEXT;
return (
<T {...this.props} ref={(t) => (this._text = t)}>
{childrenAsString(this.props.children)}
</T>
);
}
}
injectIntoDevTools({
findFiberByHostInstance: () => null,
bundleType: __DEV__ ? 1 : 0,
version: ReactVersion,
rendererPackageName: "react-art",
});
/** API */
export const ClippingRectangle = TYPES.CLIPPING_RECTANGLE;
export const Group = TYPES.GROUP;
export const Shape = TYPES.SHAPE;
export const Path = Mode.Path;
export { LinearGradient, Pattern, RadialGradient, Surface, Text, Transform };