Skip to content

Commit

Permalink
Merge pull request #58 from umbraco/feature/algolia-integration
Browse files Browse the repository at this point in the history
Algolia Search Engine integration
  • Loading branch information
acoumb authored Nov 29, 2022
2 parents e73cd29 + ef764ff commit 20df6aa
Show file tree
Hide file tree
Showing 38 changed files with 1,592 additions and 5 deletions.
12 changes: 8 additions & 4 deletions azure-pipeline - Search.Algolia.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,19 @@ steps:
- task: NuGetToolInstaller@1
displayName: 'Install NuGet'

- task: NuGetCommand@2
- task: DotNetCoreCLI@2
displayName: 'NuGet Restore'
inputs:
restoreSolution: '$(solution)'
command: 'restore'
feedsToUse: 'select'
projects: '$(project)'
includeNuGetOrg: true

- task: VSBuild@1
displayName: 'Build Project'
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
solution: '$(project)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'

Expand Down
40 changes: 40 additions & 0 deletions src/Umbraco.Cms.Integrations.Search.Algolia/AlgoliaComposer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Algolia.Search.Models.Search;

using Microsoft.Extensions.DependencyInjection;

using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Notifications;
using Umbraco.Cms.Integrations.Search.Algolia;
using Umbraco.Cms.Integrations.Search.Algolia.Configuration;
using Umbraco.Cms.Integrations.Search.Algolia.Handlers;
using Umbraco.Cms.Integrations.Search.Algolia.Migrations;
using Umbraco.Cms.Integrations.Search.Algolia.Models;
using Umbraco.Cms.Integrations.Search.Algolia.Services;

namespace Umbraco.Cms.Integrations.Crm.ActiveCampaign
{
public class AlgoliaComposer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
builder.AddNotificationHandler<UmbracoApplicationStartingNotification, RunAlgoliaIndicesMigration>();

builder.AddNotificationAsyncHandler<ContentPublishedNotification, ContentPublishedHandler>();

builder.AddNotificationAsyncHandler<ContentDeletedNotification, ContentDeletedHandler>();

builder.AddNotificationAsyncHandler<ContentUnpublishedNotification, ContentUnpublishedHandler>();

var options = builder.Services.AddOptions<AlgoliaSettings>()
.Bind(builder.Config.GetSection(Constants.SettingsPath));

builder.Services.AddSingleton<IAlgoliaIndexService, AlgoliaIndexService>();

builder.Services.AddSingleton<IAlgoliaSearchService<SearchResponse<Record>>, AlgoliaSearchService>();

builder.Services.AddScoped<IAlgoliaIndexDefinitionStorage<AlgoliaIndex>, AlgoliaIndexDefinitionStorage>();
}

}
}
17 changes: 17 additions & 0 deletions src/Umbraco.Cms.Integrations.Search.Algolia/AlgoliaDashboard.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.Dashboards;

namespace Umbraco.Cms.Integrations.Search.Algolia
{
[Weight(100)]
public class AlgoliaDashboard : IDashboard
{
public string[] Sections => new[] { Umbraco.Cms.Core.Constants.Applications.Settings };

public IAccessRule[] AccessRules => Array.Empty<IAccessRule>();

public string Alias => "algoliaSearchManagement";

public string View => "/App_Plugins/UmbracoCms.Integrations/Search/Algolia/views/dashboard.html";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<language>
<area alias="dashboardTabs">
<key alias="algoliaSearchManagement">Algolia Search Management</key>
</area>
<area alias="algolia">
<key alias="pushData">Push Data</key>
</area>
</language>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.umb-content-grid {
display:grid;
grid-template-columns: repeat(3, 1fr);
gap:10px;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
angular.module('umbraco.resources').factory('umbracoCmsIntegrationsSearchAlgoliaResource',
function ($http, umbRequestHelper) {

const apiEndpoint = "backoffice/UmbracoCmsIntegrationsSearchAlgolia/Search";

return {
getIndices: function () {
return umbRequestHelper.resourcePromise(
$http.get(`${apiEndpoint}/GetIndices`),
"Failed");
},
saveIndex: function (id, name, contentData) {
return umbRequestHelper.resourcePromise(
$http.post(`${apiEndpoint}/SaveIndex`, { id: id, name: name, contentData: contentData }),
"Failed");
},
buildIndex: function (id) {
return umbRequestHelper.resourcePromise(
$http.post(`${apiEndpoint}/BuildIndex`, { id: id }),
"Failed");
},
deleteIndex: function (id) {
return umbRequestHelper.resourcePromise(
$http.delete(`${apiEndpoint}/DeleteIndex?id=${id}`),
"Failed");
},
search: function (indexId, query) {
return umbRequestHelper.resourcePromise(
$http.get(`${apiEndpoint}/Search?indexId=${indexId}&query=${query}`),
"Failed");
}
};
}
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
function algoliaService(contentTypeResource) {
return {
getContentTypes: function (callback) {
contentTypeResource.getAll().then(function (data) {
callback(data.filter(item => item.parentId == -1 && !item.isElement).map((item) => {
return {
id: item.id,
icon: item.icon,
alias: item.alias,
name: item.name,
selected: false,
allowRemove: false
}
}));
});
},
getPropertiesByContentTypeId: function (contentTypeId, callback) {
contentTypeResource.getById(contentTypeId).then(function (data) {
var properties = [];

for (var i = 0; i < data.groups.length; i++) {
for (var j = 0; j < data.groups[i].properties.length; j++) {
properties.push({
id: data.groups[i].properties[j].id,
icon: "icon-indent",
alias: data.groups[i].properties[j].alias,
name: data.groups[i].properties[j].label,
group: data.groups[i].name,
selected: false
});
}
}

callback(properties);
});
}
}
}

angular.module("umbraco.services")
.factory("algoliaService", algoliaService);
Loading

0 comments on commit 20df6aa

Please sign in to comment.