Skip to content

Commit 2274dda

Browse files
author
Linh Hoang
committed
Merge branch 'develop' of https://github.com/episerver/content-headless-form-js-sdk into develop
2 parents 0eaae58 + a560edc commit 2274dda

37 files changed

+626
-282
lines changed

.github/workflows/ci.yml

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ on:
55
branches:
66
- master
77
- develop
8-
- feature/*
9-
- bugfix/*
8+
- release/**
109
pull_request:
11-
branches: [ "develop" ]
10+
branches:
11+
- "*"
12+
- master
13+
- feature/**
14+
- release/**
1215

1316
permissions:
1417
contents: write
@@ -18,9 +21,11 @@ permissions:
1821
env:
1922
NPM_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2023
AZURE_TOKEN: ${{ secrets.AZURE_TOKEN }}
24+
JIRA_USERNAME: ${{ secrets.JIRA_BOT_USERNAME }}
25+
JIRA_PASSWORD: ${{ secrets.JIRA_BOT_PASSWORD }}
2126

2227
jobs:
23-
build:
28+
build_test_pack:
2429
name: Build, test, and publish
2530
runs-on: windows-latest
2631
env:
@@ -33,13 +38,13 @@ jobs:
3338
steps:
3439
- name: Checkout repository
3540
uses: actions/checkout@v3
36-
41+
3742
- name: Use Node.js ${{ matrix.node-version }}
3843
uses: actions/setup-node@v3
3944
with:
4045
node-version: ${{ matrix.node-version }}
41-
cache: 'npm'
42-
46+
cache: "npm"
47+
4348
- name: Setup dependencies
4449
run: npm ci
4550

@@ -55,5 +60,27 @@ jobs:
5560
${{ github.workspace}}/build/get-versionSuffix.ps1 ${{env.BRANCH_NAME}} ${{github.RUN_NUMBER}}
5661
5762
- name: Publish
58-
if: ${{ github.ref == 'refs/heads/master' }}
59-
run: npm run publish
63+
if: ${{ contains(github.ref,'release/') || github.ref == 'refs/heads/master'}}
64+
run: npm run publish
65+
66+
jira-release:
67+
if: ${{ contains(github.ref,'release/') }}
68+
runs-on: windows-latest
69+
name: Get release version & create JIRA release
70+
needs: build_test_pack
71+
steps:
72+
- name: Checkout repository
73+
uses: actions/checkout@v1
74+
75+
- name: Get release version
76+
uses: episerver/addons-jira-automation/releaseversion@v1
77+
id: branchVersion
78+
79+
- name: Create JIRA release
80+
uses: episerver/addons-jira-automation/release@v1
81+
with:
82+
jira-project: AFORM
83+
jira-package: Optimizely.Forms.Headless.Js.Sdk
84+
jira-host: jira.sso.episerver.net
85+
version: ${{ steps.branchVersion.outputs.manifestSafeVersionString }}
86+
versionSuffix: ${{needs.build_test_pack.outputs.versionSuffix}}

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,6 @@ coverage/
1414
/samples/epiCloud/
1515
/samples/musicfestival-frontend-react/build/
1616
/samples/musicfestival-backend-dotnet/App_Data/
17+
18+
.env.local
19+
appsettings.development.json

.npmrc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
@episerver:registry=https://pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/registry/
22
always-auth=true
33
; begin auth token
4-
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/registry/:username=Phu.nguyen
4+
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/registry/:username=${AZURE_USERNAME}
55
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/registry/:_password=${AZURE_TOKEN}
6-
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/registry/:email=[email protected]
7-
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/:username=Phu.nguyen
6+
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/registry/:email=${AZURE_EMAIL}
7+
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/:username=${AZURE_USERNAME}
88
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/:_password=${AZURE_TOKEN}
9-
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/:email=[email protected]
9+
//pkgs.dev.azure.com/EpiserverEngineering/netCore/_packaging/HeadlessForms/npm/:email=${AZURE_EMAIL}
1010
; end auth token

README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ref: https://docs.developers.optimizely.com/content-management-system/v1.2.0-for
1313
### Installation
1414
**From Azure Artifacts**
1515

16-
Source https://dev.azure.com/EpiserverEngineering/netCore/_artifacts/feed/HeadlessForms
16+
Source https://dev.azure.com/EpiserverEngineering/netCore/_artifacts/feed/HeadlessForms
1717

1818
To use packages from Azure Artifacts, configure your project to reference this feed. Create a new text file called .npmrc in the same directory as your package.json, then copy the snippet below.
1919
```
@@ -28,7 +28,16 @@ Install from the command line
2828
```
2929

3030
**OR** clone source code and install dependencies, then build and view the site on the browser.
31-
31+
#### Sample site structures
32+
This repository contains two sample sites
33+
* Site render using Headless Form Api
34+
- `/samples/ManagementSite` Backend decouples site that hosts the Headless Form API
35+
- `/samples/sample-react-app` Frontend React site that render form using Headless Form API
36+
* Site render using Content Graph
37+
- `/samples/musicfestival-backend-dotnet` Backend site that fully index using Content Graph
38+
- `/samples/musicfestival-frontend-react` Frontend React site that renders the full site, including the Form, using Content Graph
39+
40+
#### Installing and running sample sites
3241
1. Clone repo
3342

3443
```sh
Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,54 @@
11
<Project Sdk="Microsoft.NET.Sdk.Web">
2-
<PropertyGroup>
3-
<TargetFramework>net6.0</TargetFramework>
4-
<NoWarn>NU5100;NU1803;NU1605;NU1504;</NoWarn>
5-
<CmsUIVersion>12.23.0</CmsUIVersion>
6-
<CmsCoreVersion>12.20.1</CmsCoreVersion>
7-
<HeadlessFormVersion>0.1.1-inte-380</HeadlessFormVersion>
8-
<ContentApiVersion>12.20.1</ContentApiVersion>
9-
<FormVersion>5.8.2</FormVersion>
10-
</PropertyGroup>
11-
<ItemGroup>
12-
<PackageReference Include="EPiServer.CMS.AspNetCore" Version="$(CmsCoreVersion)" />
13-
<PackageReference Include="EPiServer.CMS.AspNetCore.HtmlHelpers" Version="$(CmsCoreVersion)" />
14-
<PackageReference Include="EPiServer.CMS.AspNetCore.MVC" Version="$(CmsCoreVersion)" />
15-
<PackageReference Include="EPiServer.CMS.AspNetCore.Routing" Version="$(CmsCoreVersion)" />
16-
<PackageReference Include="EPiServer.CMS.AspNetCore.Templating" Version="$(CmsCoreVersion)" />
17-
<PackageReference Include="EPiServer.CMS.Core" Version="$(CmsCoreVersion)" />
18-
<PackageReference Include="EPiServer.Forms" Version="$(FormVersion)" />
19-
<PackageReference Include="EPiServer.Framework" Version="$(CmsCoreVersion)" />
20-
<PackageReference Include="EPiServer.Framework.AspNetCore" Version="$(CmsCoreVersion)" />
21-
<PackageReference Include="EPiServer.Hosting" Version="$(CmsCoreVersion)" />
22-
<PackageReference Include="EPiServer.CMS.TinyMce" Version="4.4.2" />
23-
<PackageReference Include="EPiServer.CMS.UI" Version="$(CmsUIVersion)" />
24-
<PackageReference Include="EPiServer.CMS.UI.Core" Version="$(CmsUIVersion)" />
25-
<PackageReference Include="EPiServer.CMS.UI.VisitorGroups" Version="$(CmsUIVersion)" />
26-
<PackageReference Include="EPiServer.CMS.UI.AspNetIdentity" Version="$(CmsUIVersion)" />
27-
<PackageReference Include="EPiServer.ImageLibrary.ImageSharp" Version="2.0.1" />
28-
</ItemGroup>
2+
<PropertyGroup>
3+
<TargetFramework>net6.0</TargetFramework>
4+
<NoWarn>NU5100;NU1803;NU1605;NU1504;</NoWarn>
5+
<CmsUIVersion>12.30.0</CmsUIVersion>
6+
<CmsCoreVersion>12.21.4</CmsCoreVersion>
7+
<HeadlessFormVersion>1.0.0</HeadlessFormVersion>
8+
<ContentApiVersion>12.20.1</ContentApiVersion>
9+
<FormVersion>5.9.0</FormVersion>
10+
</PropertyGroup>
11+
<ItemGroup>
12+
<PackageReference Include="EPiServer.CMS.AspNetCore" Version="$(CmsCoreVersion)" />
13+
<PackageReference Include="EPiServer.CMS.AspNetCore.HtmlHelpers" Version="$(CmsCoreVersion)" />
14+
<PackageReference Include="EPiServer.CMS.AspNetCore.MVC" Version="$(CmsCoreVersion)" />
15+
<PackageReference Include="EPiServer.CMS.AspNetCore.Routing" Version="$(CmsCoreVersion)" />
16+
<PackageReference Include="EPiServer.CMS.AspNetCore.Templating" Version="$(CmsCoreVersion)" />
17+
<PackageReference Include="EPiServer.CMS.Core" Version="$(CmsCoreVersion)" />
18+
<PackageReference Include="EPiServer.Forms" Version="$(FormVersion)" />
19+
<PackageReference Include="EPiServer.Framework" Version="$(CmsCoreVersion)" />
20+
<PackageReference Include="EPiServer.Framework.AspNetCore" Version="$(CmsCoreVersion)" />
21+
<PackageReference Include="EPiServer.Hosting" Version="$(CmsCoreVersion)" />
22+
<PackageReference Include="EPiServer.CMS.TinyMce" Version="4.4.2" />
23+
<PackageReference Include="EPiServer.CMS.UI" Version="$(CmsUIVersion)" />
24+
<PackageReference Include="EPiServer.CMS.UI.Core" Version="$(CmsUIVersion)" />
25+
<PackageReference Include="EPiServer.CMS.UI.VisitorGroups" Version="$(CmsUIVersion)" />
26+
<PackageReference Include="EPiServer.CMS.UI.AspNetIdentity" Version="$(CmsUIVersion)" />
27+
<PackageReference Include="EPiServer.ImageLibrary.ImageSharp" Version="2.0.1" />
28+
</ItemGroup>
2929
<ItemGroup Label="HeadlessForm">
30-
<PackageReference Include="Optimizely.Cms.Preview1.Content.EPiServer" Version="$(ContentApiVersion)" />
31-
<PackageReference Include="Optimizely.Headless.Form.Service" Version="$(HeadlessFormVersion)" />
30+
<PackageReference Include="Optimizely.Cms.Forms.ContentGraph" Version="$(HeadlessFormVersion)" />
31+
<PackageReference Include="Optimizely.Cms.Forms.Core" Version="$(HeadlessFormVersion)" />
32+
<PackageReference Include="Optimizely.Cms.Forms.Service" Version="$(HeadlessFormVersion)" />
33+
<PackageReference Include="Optimizely.ContentGraph.Cms" Version="3.5.1" />
3234
</ItemGroup>
3335
<ItemGroup>
3436
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
3537
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
3638
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
3739
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.0" />
3840
</ItemGroup>
39-
<ItemGroup>
40-
<PackageReference Include="EPiServer.ContentDefinitionsApi" Version="3.3.0" />
41-
<PackageReference Include="EPiServer.ContentDeliveryApi.Cms" Version="3.9.1" />
42-
<PackageReference Include="EPiServer.OpenIDConnect" Version="3.3.0" />
43-
<PackageReference Include="EPiServer.CloudPlatform.Cms" Version="1.2.0" />
44-
</ItemGroup>
45-
<PropertyGroup>
46-
<ApplicationIcon />
47-
<StartupObject />
48-
</PropertyGroup>
49-
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
50-
<NoWarn>NU5100;NU1803;NU1605;NU1504;</NoWarn>
51-
</PropertyGroup>
41+
<ItemGroup>
42+
<PackageReference Include="EPiServer.ContentDefinitionsApi" Version="3.3.0" />
43+
<PackageReference Include="EPiServer.ContentDeliveryApi.Cms" Version="3.9.1" />
44+
<PackageReference Include="EPiServer.OpenIDConnect" Version="3.3.0" />
45+
<PackageReference Include="EPiServer.CloudPlatform.Cms" Version="1.2.0" />
46+
</ItemGroup>
47+
<PropertyGroup>
48+
<ApplicationIcon />
49+
<StartupObject />
50+
</PropertyGroup>
51+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
52+
<NoWarn>NU5100;NU1803;NU1605;NU1504;</NoWarn>
53+
</PropertyGroup>
5254
</Project>
Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
using EPiServer.Cms.Shell;
1+
using EPiServer;
2+
using EPiServer.Core;
3+
using EPiServer.Forms.Implementation.Elements;
4+
using EPiServer.ServiceLocation;
5+
using EPiServer.SpecializedProperties;
26
using EPiServer.Web;
37
using EPiServer.Web.Routing;
48
using Microsoft.AspNetCore.Mvc;
5-
using Optimizely.Cms.Preview1.Content;
6-
using Optimizely.Cms.Preview1.Content.Models;
79
using System.Collections.Generic;
810
using System.Threading;
911
using System.Threading.Tasks;
@@ -13,11 +15,8 @@ namespace AlloyMvcTemplates.Controllers;
1315
[ApiController]
1416
public class ReactController : ControllerBase
1517
{
16-
private readonly IContentRepository _contentRepositoryInteApi;
17-
18-
public ReactController(IContentRepository contentRepositoryInteApi)
18+
public ReactController()
1919
{
20-
_contentRepositoryInteApi = contentRepositoryInteApi;
2120
}
2221

2322
[HttpGet("GetFormInPageByUrl")]
@@ -32,18 +31,30 @@ public async Task<IActionResult> GetFormInPageByUrl(string url)
3231
}
3332
CancellationTokenSource source = new CancellationTokenSource();
3433
CancellationToken token = source.Token;
35-
var key = ContentKey.FormatAsKey(content.ContentGuid);
34+
35+
var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
36+
37+
var pageContent = contentLoader.Get<IContent>(content.ContentGuid);
38+
3639
var pageModel = new PageModel();
37-
var contentHeadless = await _contentRepositoryInteApi.GetAsync(key, content.LanguageBranch());
3840

39-
if (contentHeadless is not null)
41+
if (pageContent is not null)
4042
{
41-
pageModel.Title = contentHeadless.DisplayName;
43+
pageModel.Title = pageContent.Name;
4244
pageModel.PageUrl = UrlResolver.Current.GetUrl(content.ContentLink);
4345

44-
if (contentHeadless.Properties.ContainsKey("MainContentArea"))
46+
if (pageContent.Property.Keys.Contains("MainContentArea"))
4547
{
46-
pageModel.Childrens.AddRange(contentHeadless.Properties["MainContentArea"] as IList<IContentComponent>);
48+
var contentArea = pageContent.Property["MainContentArea"] as PropertyContentArea;
49+
foreach (var item in contentArea.PublicContentArea.FilteredItems)
50+
{
51+
var contentItem = contentLoader.Get<IContent>(item.ContentLink);
52+
53+
if(contentItem is FormContainerBlock)
54+
{
55+
pageModel.FormKeys.Add(contentItem.ContentGuid.ToString("N"));
56+
}
57+
}
4758
}
4859
}
4960

@@ -55,5 +66,5 @@ public class PageModel
5566
{
5667
public string Title { get; set; }
5768
public string PageUrl { get; set; }
58-
public List<IContentComponent> Childrens { get; set; } = new List<IContentComponent>();
59-
}
69+
public List<string> FormKeys { get; set; } = new List<string>();
70+
}

samples/ManagementSite/Nuget.config

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
<clear />
55
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
66
<add key="optimizely" value="https://api.nuget.optimizely.com/v3/index.json" />
7-
<add key="headlessform.local" value="..\NugetPackages\" />
87
</packageSources>
98
<packageSourceMapping>
109
<packageSource key="nuget.org">
@@ -17,9 +16,7 @@
1716
<package pattern="EPiServer.Forms.*" />
1817
<package pattern="Optimizely.Cms.*" />
1918
<package pattern="EPiServer.AddOns.*" />
20-
</packageSource>
21-
<packageSource key="headlessform.local">
22-
<package pattern="Optimizely.Headless.*" />
19+
<package pattern="Optimizely.Cms.Forms.*" />
2320
</packageSource>
2421
</packageSourceMapping>
2522
</configuration>

samples/ManagementSite/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"commandName": "Project",
1313
"launchBrowser": true,
1414
"launchUrl": "episerver/cms",
15-
"applicationUrl": "http://localhost:8082",
15+
"applicationUrl": "https://localhost:8082",
1616
"environmentVariables": {
1717
"ASPNETCORE_ENVIRONMENT": "Development"
1818
}

0 commit comments

Comments
 (0)