Compare commits

..

6 Commits

Author SHA1 Message Date
Rıdvan Akca
a77ac9a3f9 feat(eventbrite): add new attendee registered trigger 2024-06-11 12:30:37 +02:00
Rıdvan Akca
6062cfafaf feat(eventbrite): add new attendee check in trigger 2024-06-11 12:18:00 +02:00
Rıdvan Akca
5263e774d2 feat(eventbrite): add new events trigger 2024-06-11 11:31:28 +02:00
Rıdvan Akca
22b4a04567 feat(eventbrite): add eventbrite integration 2024-06-11 10:44:29 +02:00
Ali BARIN
e0d610071d Merge pull request #1917 from automatisch/AUT-1009
feat: hide react-flow attribution
2024-06-05 15:35:09 +02:00
kasia.oczkowska
ab0966c005 feat: hide react-flow attribution 2024-06-05 13:39:49 +01:00
41 changed files with 522 additions and 1061 deletions

View File

@@ -1,216 +0,0 @@
import defineAction from '../../../../helpers/define-action.js';
import omitBy from 'lodash/omitBy.js';
import isEmpty from 'lodash/isEmpty.js';
export default defineAction({
name: 'Create project',
key: 'createProject',
description: 'Creates a new project.',
arguments: [
{
label: 'Workspace',
key: 'workspaceId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listWorkspaces',
},
],
},
},
{
label: 'Team',
key: 'teamId',
type: 'dropdown',
required: false,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listTeams',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
{
label: 'Due date',
key: 'dueDate',
type: 'string',
required: false,
description: 'Example due on: 2019-09-15',
variables: true,
},
{
label: 'Name',
key: 'name',
type: 'string',
required: true,
description: '',
variables: true,
},
{
label: 'Notes',
key: 'notes',
type: 'string',
required: true,
description: 'You can format the notes using html.',
variables: true,
},
{
label: 'Is the notes rich text?',
key: 'richText',
type: 'dropdown',
required: false,
description: '',
variables: true,
options: [
{
label: 'No',
value: 'false',
},
{
label: 'Yes',
value: 'true',
},
],
},
{
label: 'Default View',
key: 'defaultView',
type: 'dropdown',
required: false,
description: '',
variables: true,
options: [
{
label: 'List',
value: 'list',
},
{
label: 'Board',
value: 'board',
},
{
label: 'Calendar',
value: 'calendar',
},
{
label: 'Timeline',
value: 'timeline',
},
],
},
{
label: 'Owner',
key: 'ownerId',
type: 'dropdown',
required: false,
dependsOn: ['parameters.workspaceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listUsers',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
{
label: 'Followers',
key: 'followerIds',
type: 'dynamic',
required: false,
description: '',
fields: [
{
label: 'Follower',
key: 'followerId',
type: 'dropdown',
required: false,
dependsOn: ['parameters.workspaceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listUsers',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
],
},
],
async run($) {
const {
workspaceId,
teamId,
dueDate,
name,
notes,
richText,
defaultView,
ownerId,
followerIds,
} = $.step.parameters;
const allFollowers = followerIds
.map((followerId) => followerId.followerId)
.filter(Boolean);
const data = {
workspace: workspaceId,
team: teamId,
due_on: dueDate,
name,
default_view: defaultView,
owner: ownerId,
followers: allFollowers,
};
if (richText === 'true') {
data.html_notes = notes;
} else {
data.notes = notes;
}
const filteredData = omitBy(data, isEmpty);
const response = await $.http.post('/1.0/projects', { data: filteredData });
$.setActionItem({
raw: response.data,
});
},
});

View File

@@ -1,312 +0,0 @@
import defineAction from '../../../../helpers/define-action.js';
import omitBy from 'lodash/omitBy.js';
import isEmpty from 'lodash/isEmpty.js';
export default defineAction({
name: 'Create task',
key: 'createTask',
description: 'Creates a new task.',
arguments: [
{
label: 'Workspace',
key: 'workspaceId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listWorkspaces',
},
],
},
},
{
label: 'Project',
key: 'projectId',
type: 'dropdown',
required: false,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listProjects',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
{
label: 'Section',
key: 'sectionId',
type: 'dropdown',
required: false,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listSections',
},
{
name: 'parameters.projectId',
value: '{parameters.projectId}',
},
],
},
},
{
label: 'Due date type',
key: 'dueDateType',
type: 'dropdown',
required: false,
description: "If not filled in, 'Date & time' will be assumed.",
options: [
{
label: 'Date & time',
value: 'at',
},
{
label: 'Date only',
value: 'on',
},
],
},
{
label: 'Due date (date & time)',
key: 'dueDate',
type: 'string',
required: false,
description:
'Example due at: 2019-09-15T02:06:58.147Z, example due on: 2019-09-15',
variables: true,
},
{
label: 'Name',
key: 'name',
type: 'string',
required: false,
description: '',
variables: true,
},
{
label: 'Description',
key: 'description',
type: 'string',
required: false,
description: 'You can format the description using html.',
variables: true,
},
{
label: 'Is the description rich text?',
key: 'richText',
type: 'dropdown',
required: false,
description: '',
variables: true,
options: [
{
label: 'No',
value: 'false',
},
{
label: 'Yes',
value: 'true',
},
],
},
{
label: 'Mark Task as complete?',
key: 'taskCompleted',
type: 'dropdown',
required: false,
description: '',
variables: true,
options: [
{
label: 'No',
value: 'false',
},
{
label: 'Yes',
value: 'true',
},
],
},
{
label: 'Mark Task as liked?',
key: 'taskLiked',
type: 'dropdown',
required: false,
description: '',
variables: true,
options: [
{
label: 'No',
value: 'false',
},
{
label: 'Yes',
value: 'true',
},
],
},
{
label: 'Assignee',
key: 'assigneeId',
type: 'dropdown',
required: false,
dependsOn: ['parameters.workspaceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listUsers',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
{
label: 'Followers',
key: 'followerIds',
type: 'dynamic',
required: false,
description: '',
fields: [
{
label: 'Follower',
key: 'followerId',
type: 'dropdown',
required: false,
dependsOn: ['parameters.workspaceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listUsers',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
],
},
{
label: 'Tags',
key: 'tagIds',
type: 'dynamic',
required: false,
description: '',
fields: [
{
label: 'Tag',
key: 'tagId',
type: 'dropdown',
required: false,
dependsOn: ['parameters.workspaceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listTags',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
],
},
],
async run($) {
const {
workspaceId,
projectId,
sectionId,
dueDateType,
dueDate,
name,
description,
richText,
taskCompleted,
taskLiked,
assigneeId,
followerIds,
tagIds,
} = $.step.parameters;
const allFollowers = followerIds
.map((followerId) => followerId.followerId)
.filter(Boolean);
const allTags = tagIds.map((tagId) => tagId.tagId).filter(Boolean);
const data = {
name,
completed: taskCompleted,
liked: taskLiked,
assignee: assigneeId,
assignee_section: sectionId,
followers: allFollowers,
projects: projectId,
tags: allTags,
workspace: workspaceId,
};
if (richText === 'true') {
data.html_notes = description;
} else {
data.notes = description;
}
if (dueDateType === 'on') {
data.due_on = dueDate;
} else {
data.due_at = dueDate;
}
const filteredData = omitBy(data, isEmpty);
const response = await $.http.post('/1.0/tasks', { data: filteredData });
$.setActionItem({
raw: response.data,
});
},
});

View File

@@ -1,49 +0,0 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Find project',
key: 'findProject',
description: 'Finds an existing project.',
arguments: [
{
label: 'Workspace',
key: 'workspaceId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listWorkspaces',
},
],
},
},
{
label: 'Name',
key: 'name',
type: 'string',
required: true,
description: '',
variables: true,
},
],
async run($) {
const { workspaceId, name } = $.step.parameters;
const { data } = await $.http.get(
`/1.0/workspaces/${workspaceId}/projects`
);
const project = data.data.find((project) => project.name === name);
$.setActionItem({
raw: project,
});
},
});

View File

@@ -1,5 +0,0 @@
import createProject from './create-project/index.js';
import createTask from './create-task/index.js';
import findProject from './find-project/index.js';
export default [createProject, createTask, findProject];

View File

@@ -1,8 +0,0 @@
<svg width="555" height="110" viewBox="0 0 555 110" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M541.011 83.513C541.347 87.339 544.407 92.209 549.709 92.209H552.811C554.014 92.209 555 91.2232 555 90.0197V21.7948H554.986C554.923 20.6454 553.974 19.7248 552.811 19.7248H543.199C542.036 19.7248 541.087 20.6454 541.023 21.7948H541.011V27.3385C535.122 20.0789 525.836 17.0657 516.525 17.0657C495.359 17.0657 478.202 34.2365 478.202 55.419C478.202 76.6027 495.359 93.7741 516.525 93.7741V93.7759C525.836 93.7759 535.983 90.1606 541.01 83.5042L541.011 83.513V83.513ZM516.562 80.3509C503.101 80.3509 492.188 69.1896 492.188 55.4192C492.188 41.6511 503.101 30.4892 516.562 30.4892C530.022 30.4892 540.934 41.6511 540.934 55.4192C540.934 69.1896 530.022 80.3509 516.562 80.3509V80.3509Z" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M466.05 85.8589L466.045 50.5554H466.046C466.046 30.655 453.501 17.2299 433.497 17.2299C423.947 17.2299 416.119 22.7561 413.355 27.5032C412.757 23.7913 410.788 19.8896 404.681 19.8896H401.569C400.365 19.8896 399.382 20.876 399.382 22.0795V83.6835C399.382 83.6853 399.382 83.69 399.382 83.6929V90.3102H399.394C399.457 91.4579 400.408 92.3796 401.57 92.3796H411.182C411.33 92.3796 411.474 92.3621 411.613 92.3347C411.677 92.3225 411.736 92.2975 411.798 92.28C411.869 92.2579 411.944 92.241 412.012 92.213C412.097 92.1775 412.175 92.1298 412.255 92.0855C412.294 92.0617 412.334 92.0448 412.372 92.0197C412.468 91.958 412.556 91.8835 412.641 91.8072C412.655 91.7932 412.672 91.7839 412.686 91.7711C412.781 91.6785 412.868 91.5766 412.946 91.4707C412.946 91.4689 412.946 91.4689 412.946 91.4689C413.187 91.1382 413.333 90.7399 413.357 90.3102H413.369V50.0081C413.369 39.3201 422.028 30.655 432.709 30.655C443.389 30.655 452.047 39.3201 452.047 50.0081L452.056 83.6952L452.058 83.6835C452.058 83.7132 452.063 83.7441 452.063 83.7761V90.3102H452.076C452.139 91.4579 453.089 92.3796 454.251 92.3796H463.864C464.012 92.3796 464.156 92.3621 464.295 92.3347C464.352 92.3243 464.404 92.3015 464.46 92.2858C464.538 92.2631 464.619 92.2433 464.695 92.213C464.773 92.1804 464.845 92.135 464.92 92.0931C464.965 92.0675 465.013 92.0489 465.056 92.0197C465.145 91.9615 465.226 91.8911 465.306 91.8212C465.326 91.8026 465.349 91.7886 465.368 91.7694C465.459 91.6814 465.54 91.5865 465.615 91.487C465.62 91.4794 465.626 91.4736 465.632 91.466C465.868 91.1382 466.013 90.7428 466.038 90.3161C466.038 90.3131 466.039 90.3102 466.039 90.3102H466.052V85.86L466.05 85.8589" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M365.94 83.5127C366.276 87.3387 369.336 92.2088 374.638 92.2088H377.74C378.943 92.2088 379.927 91.223 379.927 90.0195V21.7945H379.915C379.852 20.6452 378.901 19.7246 377.74 19.7246H368.128C366.965 19.7246 366.016 20.6452 365.951 21.7945H365.94V27.3382C360.05 20.0786 350.764 17.0654 341.453 17.0654C320.288 17.0654 303.131 34.2362 303.131 55.4188C303.131 76.6025 320.288 93.7739 341.453 93.7739V93.7756C350.764 93.7756 360.912 90.1604 365.939 83.504L365.94 83.5127V83.5127ZM341.49 80.3506C328.03 80.3506 317.117 69.1893 317.117 55.4189C317.117 41.6509 328.03 30.489 341.49 30.489C354.952 30.489 365.862 41.6509 365.862 55.4189C365.862 69.1893 354.952 80.3506 341.49 80.3506V80.3506Z" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M246.284 73.7415C252.702 78.1905 259.706 80.3513 266.437 80.3513C272.85 80.3513 279.479 77.0242 279.479 71.2337C279.479 63.5024 265.033 62.2995 255.957 59.2124C246.88 56.1252 239.061 49.7437 239.061 39.4092C239.061 23.5956 253.14 17.0645 266.281 17.0645C274.607 17.0645 283.198 19.8121 288.767 23.7482C290.686 25.2027 289.517 26.8726 289.517 26.8726L284.201 34.4716C283.603 35.3276 282.559 36.067 281.059 35.1407C279.559 34.2149 274.298 30.4884 266.281 30.4884C258.263 30.4884 253.434 34.1939 253.434 38.7868C253.434 44.2943 259.711 46.0266 267.063 47.9038C279.875 51.36 293.852 55.5144 293.852 71.2337C293.852 85.1665 280.829 93.777 266.437 93.777C255.53 93.777 246.244 90.6654 238.456 84.9459C236.834 83.3208 237.967 81.8121 237.967 81.8121L243.257 74.2515C244.334 72.8378 245.691 73.331 246.284 73.7415" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M209.331 83.5127C209.668 87.3387 212.728 92.2088 218.03 92.2088H221.132C222.334 92.2088 223.32 91.223 223.32 90.0195V21.7945H223.307C223.244 20.6452 222.294 19.7246 221.132 19.7246H211.519C210.357 19.7246 209.408 20.6452 209.343 21.7945H209.331V27.3382C203.442 20.0786 194.156 17.0654 184.845 17.0654C163.68 17.0654 146.522 34.2362 146.522 55.4188C146.522 76.6025 163.68 93.7739 184.845 93.7739V93.7756C194.156 93.7756 204.304 90.1604 209.33 83.504L209.331 83.5127V83.5127ZM184.883 80.3506C171.422 80.3506 160.509 69.1893 160.509 55.4189C160.509 41.6509 171.422 30.489 184.883 30.489C198.343 30.489 209.255 41.6509 209.255 55.4189C209.255 69.1893 198.343 80.3506 184.883 80.3506V80.3506Z" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M92.794 58.0274C78.5507 58.0274 67.0041 69.5741 67.0041 83.8185C67.0041 98.0618 78.5507 109.608 92.794 109.608C107.037 109.608 118.584 98.0618 118.584 83.8185C118.584 69.5741 107.037 58.0274 92.794 58.0274V58.0274ZM25.7899 58.0298C11.5466 58.0298 0 69.5741 0 83.8186C0 98.0618 11.5466 109.608 25.7899 109.608C40.0338 109.608 51.581 98.0618 51.581 83.8186C51.581 69.5741 40.0338 58.0298 25.7899 58.0298V58.0298ZM85.0815 25.7894C85.0815 40.0338 73.5354 51.5816 59.2921 51.5816C45.0483 51.5816 33.5022 40.0338 33.5022 25.7894C33.5022 11.5478 45.0483 0 59.2921 0C73.5354 0 85.0815 11.5478 85.0815 25.7894V25.7894Z" fill="#FF584A"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -1,37 +0,0 @@
import { URLSearchParams } from 'node:url';
const refreshToken = async ($) => {
const oauthRedirectUrlField = $.app.auth.fields.find(
(field) => field.key == 'oAuthRedirectUrl'
);
const redirectUri = oauthRedirectUrlField.value;
const params = new URLSearchParams({
client_id: $.auth.data.clientId,
client_secret: $.auth.data.clientSecret,
redirect_uri: redirectUri,
grant_type: 'refresh_token',
refresh_token: $.auth.data.refreshToken,
});
const { data } = await $.http.post(
'https://app.asana.com/-/oauth_token',
params.toString(),
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
additionalProperties: {
skipAddingAuthHeader: true,
},
}
);
await $.auth.set({
accessToken: data.access_token,
expiresIn: data.expires_in,
tokenType: data.token_type,
});
};
export default refreshToken;

View File

@@ -1,12 +0,0 @@
const addAuthHeader = ($, requestConfig) => {
if (requestConfig.additionalProperties?.skipAddingAuthHeader)
return requestConfig;
if ($.auth.data?.accessToken) {
requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`;
}
return requestConfig;
};
export default addAuthHeader;

View File

@@ -1,15 +0,0 @@
import listProjects from './list-projects/index.js';
import listSections from './list-sections/index.js';
import listTags from './list-tags/index.js';
import listTeams from './list-teams/index.js';
import listUsers from './list-users/index.js';
import listWorkspaces from './list-workspaces/index.js';
export default [
listProjects,
listSections,
listTags,
listTeams,
listUsers,
listWorkspaces,
];

View File

@@ -1,42 +0,0 @@
export default {
name: 'List projects',
key: 'listProjects',
async run($) {
const projects = {
data: [],
};
const workspaceId = $.step.parameters.workspaceId;
if (!workspaceId) {
return projects;
}
const params = {
limit: 100,
offset: undefined,
workspace: workspaceId,
};
do {
const {
data: { data, next_page },
} = await $.http.get('/1.0/projects', {
params,
});
params.offset = next_page?.offset;
if (data) {
for (const project of data) {
projects.data.push({
value: project.gid,
name: project.name,
});
}
}
} while (params.offset);
return projects;
},
};

View File

@@ -1,41 +0,0 @@
export default {
name: 'List sections',
key: 'listSections',
async run($) {
const sections = {
data: [],
};
const projectId = $.step.parameters.projectId;
if (!projectId) {
return sections;
}
const params = {
limit: 100,
offset: undefined,
};
do {
const {
data: { data, next_page },
} = await $.http.get(`/1.0/projects/${projectId}/sections`, {
params,
});
params.offset = next_page?.offset;
if (data) {
for (const section of data) {
sections.data.push({
value: section.gid,
name: section.name,
});
}
}
} while (params.offset);
return sections;
},
};

View File

@@ -1,42 +0,0 @@
export default {
name: 'List tags',
key: 'listTags',
async run($) {
const tags = {
data: [],
};
const workspaceId = $.step.parameters.workspaceId;
if (!workspaceId) {
return workspaceId;
}
const params = {
limit: 100,
offset: undefined,
workspace: workspaceId,
};
do {
const {
data: { data, next_page },
} = await $.http.get('/1.0/tags', {
params,
});
params.offset = next_page?.offset;
if (data) {
for (const tag of data) {
tags.data.push({
value: tag.gid,
name: tag.name,
});
}
}
} while (params.offset);
return tags;
},
};

View File

@@ -1,42 +0,0 @@
export default {
name: 'List teams',
key: 'listTeams',
async run($) {
const teams = {
data: [],
};
const workspaceId = $.step.parameters.workspaceId;
if (!workspaceId) {
return workspaceId;
}
const params = {
limit: 100,
offset: undefined,
workspace: workspaceId,
};
do {
const {
data: { data, next_page },
} = await $.http.get('/1.0/teams', {
params,
});
params.offset = next_page?.offset;
if (data) {
for (const team of data) {
teams.data.push({
value: team.gid,
name: team.name,
});
}
}
} while (params.offset);
return teams;
},
};

View File

@@ -1,42 +0,0 @@
export default {
name: 'List users',
key: 'listUsers',
async run($) {
const users = {
data: [],
};
const workspaceId = $.step.parameters.workspaceId;
if (!workspaceId) {
return workspaceId;
}
const params = {
limit: 100,
offset: undefined,
workspace: workspaceId,
};
do {
const {
data: { data, next_page },
} = await $.http.get('/1.0/users', {
params,
});
params.offset = next_page?.offset;
if (data) {
for (const user of data) {
users.data.push({
value: user.gid,
name: user.name,
});
}
}
} while (params.offset);
return users;
},
};

View File

@@ -1,34 +0,0 @@
export default {
name: 'List workspaces',
key: 'listWorkspaces',
async run($) {
const workspaces = {
data: [],
};
const params = {
limit: 100,
offset: undefined,
};
do {
const {
data: { data, next_page },
} = await $.http.get('/1.0/workspaces', { params });
params.offset = next_page?.offset;
if (data) {
for (const workspace of data) {
workspaces.data.push({
value: workspace.gid,
name: workspace.name,
});
}
}
} while (params.offset);
return workspaces;
},
};

View File

@@ -1,3 +0,0 @@
import newProjects from './new-projects/index.js';
export default [newProjects];

View File

@@ -1,59 +0,0 @@
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New projects',
key: 'newProjects',
pollInterval: 15,
description: 'Triggers when a new project is created.',
arguments: [
{
label: 'Workspace',
key: 'workspaceId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listWorkspaces',
},
],
},
},
],
async run($) {
const workspaceId = $.step.parameters.workspaceId;
const params = {
limit: 100,
offset: undefined,
workspace: workspaceId,
};
do {
const {
data: { data, next_page },
} = await $.http.get('/1.0/projects', {
params,
});
params.offset = next_page?.offset;
if (data) {
for (const project of data) {
$.pushTriggerItem({
raw: project,
meta: {
internalId: project.gid,
},
});
}
}
} while (params.offset);
},
});

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="256px" height="256px" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
<g>
<circle fill="#F05537" cx="128" cy="128" r="128"></circle>
<path d="M117.475323,82.7290398 C136.772428,78.4407943 156.069532,86.3025777 166.790146,101.311437 L81.5017079,120.608542 C84.3605382,102.26438 98.1782181,87.0172853 117.475323,82.7290398 Z M167.266618,153.48509 C160.596014,163.252761 150.351872,170.161601 138.678314,172.782195 C119.38121,177.070441 99.8458692,169.208657 89.1252554,153.961562 L174.651929,134.664457 L188.469609,131.567391 L215.152026,125.611495 C214.91379,119.893834 214.199082,114.176173 213.007903,108.696749 C202.287289,62.7172275 155.354825,33.8906884 108.42236,44.6113021 C61.4898956,55.3319159 32.1868848,101.073201 43.1457344,147.290958 C54.1045839,193.508715 100.798813,222.097018 147.731277,211.376404 C175.366637,205.182272 196.807864,186.599875 207.766714,163.014525 L167.266618,153.48509 L167.266618,153.48509 Z" fill="#FFFFFF" fill-rule="nonzero"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,25 +1,19 @@
import { URLSearchParams } from 'url';
import crypto from 'crypto';
export default async function generateAuthUrl($) {
const oauthRedirectUrlField = $.app.auth.fields.find(
(field) => field.key == 'oAuthRedirectUrl'
);
const redirectUri = oauthRedirectUrlField.value;
const state = crypto.randomBytes(100).toString('base64url');
const searchParams = new URLSearchParams({
response_type: 'code',
client_id: $.auth.data.clientId,
redirect_uri: redirectUri,
response_type: 'code',
//scope: authScope.join(' '),
state,
});
const url = `https://app.asana.com/-/oauth_authorize?${searchParams.toString()}`;
const url = `https://www.eventbrite.com/oauth/authorize?${searchParams.toString()}`;
await $.auth.set({
url,
originalState: state,
});
}

View File

@@ -1,6 +1,5 @@
import generateAuthUrl from './generate-auth-url.js';
import verifyCredentials from './verify-credentials.js';
import refreshToken from './refresh-token.js';
import isStillVerified from './is-still-verified.js';
export default {
@@ -11,15 +10,15 @@ export default {
type: 'string',
required: true,
readOnly: true,
value: '{WEB_APP_URL}/app/asana/connections/add',
value: '{WEB_APP_URL}/app/eventbrite/connections/add',
placeholder: null,
description:
'When asked to input a redirect URL in Asana, enter the URL above.',
'When asked to input a redirect URL in Eventbrite, enter the URL above.',
clickToCopy: true,
},
{
key: 'clientId',
label: 'Client ID',
label: 'API Key',
type: 'string',
required: true,
readOnly: false,
@@ -44,5 +43,4 @@ export default {
generateAuthUrl,
verifyCredentials,
isStillVerified,
refreshToken,
};

View File

@@ -2,7 +2,7 @@ import getCurrentUser from '../common/get-current-user.js';
const isStillVerified = async ($) => {
const currentUser = await getCurrentUser($);
return !!currentUser.data.email;
return !!currentUser.id;
};
export default isStillVerified;

View File

@@ -1,18 +1,17 @@
import getCurrentUser from '../common/get-current-user.js';
const verifyCredentials = async ($) => {
if ($.auth.data.originalState !== $.auth.data.state) {
throw new Error("The 'state' parameter does not match.");
}
const oauthRedirectUrlField = $.app.auth.fields.find(
(field) => field.key == 'oAuthRedirectUrl'
);
const redirectUri = oauthRedirectUrlField.value;
const { data } = await $.http.post(
'https://app.asana.com/-/oauth_token',
'https://www.eventbrite.com/oauth/token',
{
grant_type: 'authorization_code',
client_id: $.auth.data.clientId,
client_secret: $.auth.data.clientSecret,
code: $.auth.data.code,
grant_type: 'authorization_code',
redirect_uri: redirectUri,
},
{
@@ -25,14 +24,18 @@ const verifyCredentials = async ($) => {
await $.auth.set({
accessToken: data.access_token,
tokenType: data.token_type,
});
const currentUser = await getCurrentUser($);
const screenName = [currentUser.name, currentUser.emails[0].email]
.filter(Boolean)
.join(' @ ');
await $.auth.set({
clientId: $.auth.data.clientId,
clientSecret: $.auth.data.clientSecret,
scope: $.auth.data.scope,
id: data.data.id,
gid: data.data.gid,
expiresIn: data.expires_in,
refreshToken: data.refresh_token,
screenName: `${data.data.name} - ${data.data.email}`,
screenName,
});
};

View File

@@ -0,0 +1,9 @@
const addAuthHeader = ($, requestConfig) => {
if ($.auth.data?.accessToken) {
requestConfig.headers.Authorization = `Bearer ${$.auth.data.accessToken}`;
}
return requestConfig;
};
export default addAuthHeader;

View File

@@ -1,7 +1,5 @@
const getCurrentUser = async ($) => {
const { data: currentUser } = await $.http.get(
`/1.0/users/${$.auth.data.gid}`
);
const { data: currentUser } = await $.http.get('/v3/users/me');
return currentUser;
};

View File

@@ -0,0 +1,4 @@
import listEvents from './list-events/index.js';
import listOrganizations from './list-organizations/index.js';
export default [listEvents, listOrganizations];

View File

@@ -0,0 +1,44 @@
export default {
name: 'List events',
key: 'listEvents',
async run($) {
const events = {
data: [],
};
const organizationId = $.step.parameters.organizationId;
if (!organizationId) {
return events;
}
const params = {
continuation: undefined,
order_by: 'created_desc',
};
do {
const { data } = await $.http.get(
`/v3/organizations/${organizationId}/events/`,
{
params,
}
);
if (data.pagination.has_more_items) {
params.continuation = data.pagination.continuation;
}
if (data.events) {
for (const event of data.events) {
events.data.push({
value: event.id,
name: `${event.name.text} (${event.status})`,
});
}
}
} while (params.continuation);
return events;
},
};

View File

@@ -0,0 +1,35 @@
export default {
name: 'List organizations',
key: 'listOrganizations',
async run($) {
const organizations = {
data: [],
};
const params = {
continuation: undefined,
};
do {
const { data } = await $.http.get('/v3/users/me/organizations', {
params,
});
if (data.pagination.has_more_items) {
params.continuation = data.pagination.continuation;
}
if (data.organizations) {
for (const organization of data.organizations) {
organizations.data.push({
value: organization.id,
name: organization.name,
});
}
}
} while (params.continuation);
return organizations;
},
};

View File

@@ -3,20 +3,18 @@ import addAuthHeader from './common/add-auth-header.js';
import auth from './auth/index.js';
import dynamicData from './dynamic-data/index.js';
import triggers from './triggers/index.js';
import actions from './actions/index.js';
export default defineApp({
name: 'Asana',
key: 'asana',
baseUrl: 'https://asana.com',
apiBaseUrl: 'https://app.asana.com/api',
iconUrl: '{BASE_URL}/apps/asana/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/asana/connection',
primaryColor: '690031',
name: 'Eventbrite',
key: 'eventbrite',
baseUrl: 'https://www.eventbrite.com',
apiBaseUrl: 'https://www.eventbriteapi.com',
iconUrl: '{BASE_URL}/apps/eventbrite/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/eventbrite/connection',
primaryColor: 'F05537',
supportsConnections: true,
beforeRequest: [addAuthHeader],
auth,
dynamicData,
triggers,
actions,
});

View File

@@ -0,0 +1,5 @@
import newAttendeeCheckIn from './new-attendee-check-in/index.js';
import newAttendeeRegistered from './new-attendee-registered/index.js';
import newEvents from './new-events/index.js';
export default [newAttendeeCheckIn, newAttendeeRegistered, newEvents];

View File

@@ -0,0 +1,120 @@
import Crypto from 'crypto';
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New attendee check in',
key: 'newAttendeeCheckIn',
type: 'webhook',
description: "Triggers when an attendee's barcode is scanned in.",
arguments: [
{
label: 'Organization',
key: 'organizationId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listOrganizations',
},
],
},
},
{
label: 'Event',
key: 'eventId',
type: 'dropdown',
required: false,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listEvents',
},
{
name: 'parameters.organizationId',
value: '{parameters.organizationId}',
},
],
},
},
],
async run($) {
const dataItem = {
raw: $.request.body,
meta: {
internalId: Crypto.randomUUID(),
},
};
$.pushTriggerItem(dataItem);
},
async testRun($) {
const eventId = $.step.parameters.eventId;
const organizationId = $.step.parameters.organizationId;
const params = {
event_id: eventId,
};
const {
data: { orders },
} = await $.http.get(`/v3/events/${eventId}/orders/`, params);
if (orders.length === 0) {
return;
}
const computedWebhookEvent = {
config: {
action: 'barcode.checked_in',
user_id: organizationId,
webhook_id: '11111111',
endpoint_url: $.webhookUrl,
},
api_url: orders[0].resource_uri,
};
const dataItem = {
raw: computedWebhookEvent,
meta: {
internalId: computedWebhookEvent.user_id,
},
};
$.pushTriggerItem(dataItem);
},
async registerHook($) {
const organizationId = $.step.parameters.organizationId;
const eventId = $.step.parameters.eventId;
const payload = {
endpoint_url: $.webhookUrl,
actions: 'attendee.checked_in',
event_id: eventId,
};
const { data } = await $.http.post(
`/v3/organizations/${organizationId}/webhooks/`,
payload
);
await $.flow.setRemoteWebhookId(data.id);
},
async unregisterHook($) {
await $.http.delete(`/v3/webhooks/${$.flow.remoteWebhookId}/`);
},
});

View File

@@ -0,0 +1,120 @@
import Crypto from 'crypto';
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New attendee registered',
key: 'newAttendeeRegistered',
type: 'webhook',
description: 'Triggers when an attendee orders a ticket for an event.',
arguments: [
{
label: 'Organization',
key: 'organizationId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listOrganizations',
},
],
},
},
{
label: 'Event',
key: 'eventId',
type: 'dropdown',
required: false,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listEvents',
},
{
name: 'parameters.organizationId',
value: '{parameters.organizationId}',
},
],
},
},
],
async run($) {
const dataItem = {
raw: $.request.body,
meta: {
internalId: Crypto.randomUUID(),
},
};
$.pushTriggerItem(dataItem);
},
async testRun($) {
const eventId = $.step.parameters.eventId;
const organizationId = $.step.parameters.organizationId;
const params = {
event_id: eventId,
};
const {
data: { orders },
} = await $.http.get(`/v3/events/${eventId}/orders/`, params);
if (orders.length === 0) {
return;
}
const computedWebhookEvent = {
config: {
action: 'order.placed',
user_id: organizationId,
webhook_id: '11111111',
endpoint_url: $.webhookUrl,
},
api_url: orders[0].resource_uri,
};
const dataItem = {
raw: computedWebhookEvent,
meta: {
internalId: computedWebhookEvent.user_id,
},
};
$.pushTriggerItem(dataItem);
},
async registerHook($) {
const organizationId = $.step.parameters.organizationId;
const eventId = $.step.parameters.eventId;
const payload = {
endpoint_url: $.webhookUrl,
actions: 'order.placed',
event_id: eventId,
};
const { data } = await $.http.post(
`/v3/organizations/${organizationId}/webhooks/`,
payload
);
await $.flow.setRemoteWebhookId(data.id);
},
async unregisterHook($) {
await $.http.delete(`/v3/webhooks/${$.flow.remoteWebhookId}/`);
},
});

View File

@@ -0,0 +1,98 @@
import Crypto from 'crypto';
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New events',
key: 'newEvents',
type: 'webhook',
description:
'Triggers when a new event is published and live within an organization.',
arguments: [
{
label: 'Organization',
key: 'organizationId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listOrganizations',
},
],
},
},
],
async run($) {
const dataItem = {
raw: $.request.body,
meta: {
internalId: Crypto.randomUUID(),
},
};
$.pushTriggerItem(dataItem);
},
async testRun($) {
const organizationId = $.step.parameters.organizationId;
const params = {
orderBy: 'created_desc',
status: 'all',
};
const {
data: { events },
} = await $.http.get(`/v3/organizations/${organizationId}/events/`, params);
if (events.length === 0) {
return;
}
const computedWebhookEvent = {
config: {
action: 'event.published',
user_id: events[0].organization_id,
webhook_id: '11111111',
endpoint_url: $.webhookUrl,
},
api_url: events[0].resource_uri,
};
const dataItem = {
raw: computedWebhookEvent,
meta: {
internalId: computedWebhookEvent.user_id,
},
};
$.pushTriggerItem(dataItem);
},
async registerHook($) {
const organizationId = $.step.parameters.organizationId;
const payload = {
endpoint_url: $.webhookUrl,
actions: 'event.published',
event_id: '',
};
const { data } = await $.http.post(
`/v3/organizations/${organizationId}/webhooks/`,
payload
);
await $.flow.setRemoteWebhookId(data.id);
},
async unregisterHook($) {
await $.http.delete(`/v3/webhooks/${$.flow.remoteWebhookId}/`);
},
});

View File

@@ -50,16 +50,6 @@ export default defineConfig({
{ text: 'Connection', link: '/apps/appwrite/connection' },
],
},
{
text: 'Asana',
collapsible: true,
collapsed: true,
items: [
{ text: 'Triggers', link: '/apps/asana/triggers' },
{ text: 'Actions', link: '/apps/asana/actions' },
{ text: 'Connection', link: '/apps/asana/connection' },
],
},
{
text: 'Carbone',
collapsible: true,
@@ -123,6 +113,15 @@ export default defineConfig({
{ text: 'Connection', link: '/apps/dropbox/connection' },
],
},
{
text: 'Eventbrite',
collapsible: true,
collapsed: true,
items: [
{ text: 'Triggers', link: '/apps/eventbrite/triggers' },
{ text: 'Connection', link: '/apps/eventbrite/connection' },
],
},
{
text: 'Filter',
collapsible: true,

View File

@@ -1,16 +0,0 @@
---
favicon: /favicons/asana.svg
items:
- name: Create project
desc: Creates a new project.
- name: Create task
desc: Creates a new task.
- name: Find project
desc: Finds an existing project.
---
<script setup>
import CustomListing from '../../components/CustomListing.vue'
</script>
<CustomListing />

View File

@@ -1,17 +0,0 @@
# Asana
:::info
This page explains the steps you need to follow to set up the Asana
connection in Automatisch. If any of the steps are outdated, please let us know!
:::
1. Go to the [Asana developer console](https://app.asana.com/0/my-apps) to create a project.
2. Click on the **Create new app** in **My Apps**, and click on the **New Project** button.
3. Fill the form for your project and click on the **Create app** button.
4. Go to **Manage distrubition** and select **Any workspace** option in **Choose a distribution method** and save it.
5. Go to **OAuth** tab from left panel and click on the **+Add redirect URL** button.
6. Copy **OAuth Redirect URL** from Automatisch to the redirect url field, and click on the **Add** button.
7. Copy the **Your Client ID** value on the same page to the `Client ID` field on Automatisch.
8. Copy the **Your Client secret** value on the same page to the `Client Secret` field on Automatisch.
9. Click **Submit** button on Automatisch.
10. Congrats! Start using your new Asana connection within the flows.

View File

@@ -1,12 +0,0 @@
---
favicon: /favicons/asana.svg
items:
- name: New projects
desc: Triggers when a new project is created.
---
<script setup>
import CustomListing from '../../components/CustomListing.vue'
</script>
<CustomListing />

View File

@@ -0,0 +1,18 @@
# Eventbrite
:::info
This page explains the steps you need to follow to set up the Eventbrite
connection in Automatisch. If any of the steps are outdated, please let us know!
:::
1. Go to your Eventbrite account settings.
2. Click on the **Developer Links**, and click on the **API Keys** button.
3. Click on the **Create API Key** button.
4. Fill the form.
5. Copy **OAuth Redirect URL** from Automatisch to **OAuth Redirect URI** field in the form.
6. After filling the form, click on the **Create Key** button.
7. Click on the **Show API key, client secret and tokens** in the middle of the page.
8. Copy the **API Key** value to the `API Key` field on Automatisch.
9. Copy the **Client secret** value to the `Client Secret` field on Automatisch.
10. Click **Submit** button on Automatisch.
11. Congrats! Start using your new Eventbrite connection within the flows.

View File

@@ -0,0 +1,16 @@
---
favicon: /favicons/eventbrite.svg
items:
- name: New attendee check in
desc: Triggers when an attendee's barcode is scanned in.
- name: New attendee registered
desc: Triggers when an attendee orders a ticket for an event.
- name: New events
desc: Triggers when a new event is published and live within an organization.
---
<script setup>
import CustomListing from '../../components/CustomListing.vue'
</script>
<CustomListing />

View File

@@ -4,7 +4,6 @@ The following integrations are currently supported by Automatisch.
- [Airtable](/apps/airtable/actions)
- [Appwrite](/apps/appwrite/triggers)
- [Asana](/apps/asana/triggers)
- [Carbone](/apps/carbone/actions)
- [Datastore](/apps/datastore/actions)
- [DeepL](/apps/deepl/actions)
@@ -12,6 +11,7 @@ The following integrations are currently supported by Automatisch.
- [Discord](/apps/discord/actions)
- [Disqus](/apps/disqus/triggers)
- [Dropbox](/apps/dropbox/actions)
- [Eventbrite](/apps/eventbrite/triggers)
- [Filter](/apps/filter/actions)
- [Flickr](/apps/flickr/triggers)
- [Formatter](/apps/formatter/actions)

View File

@@ -1,8 +0,0 @@
<svg width="555" height="110" viewBox="0 0 555 110" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M541.011 83.513C541.347 87.339 544.407 92.209 549.709 92.209H552.811C554.014 92.209 555 91.2232 555 90.0197V21.7948H554.986C554.923 20.6454 553.974 19.7248 552.811 19.7248H543.199C542.036 19.7248 541.087 20.6454 541.023 21.7948H541.011V27.3385C535.122 20.0789 525.836 17.0657 516.525 17.0657C495.359 17.0657 478.202 34.2365 478.202 55.419C478.202 76.6027 495.359 93.7741 516.525 93.7741V93.7759C525.836 93.7759 535.983 90.1606 541.01 83.5042L541.011 83.513V83.513ZM516.562 80.3509C503.101 80.3509 492.188 69.1896 492.188 55.4192C492.188 41.6511 503.101 30.4892 516.562 30.4892C530.022 30.4892 540.934 41.6511 540.934 55.4192C540.934 69.1896 530.022 80.3509 516.562 80.3509V80.3509Z" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M466.05 85.8589L466.045 50.5554H466.046C466.046 30.655 453.501 17.2299 433.497 17.2299C423.947 17.2299 416.119 22.7561 413.355 27.5032C412.757 23.7913 410.788 19.8896 404.681 19.8896H401.569C400.365 19.8896 399.382 20.876 399.382 22.0795V83.6835C399.382 83.6853 399.382 83.69 399.382 83.6929V90.3102H399.394C399.457 91.4579 400.408 92.3796 401.57 92.3796H411.182C411.33 92.3796 411.474 92.3621 411.613 92.3347C411.677 92.3225 411.736 92.2975 411.798 92.28C411.869 92.2579 411.944 92.241 412.012 92.213C412.097 92.1775 412.175 92.1298 412.255 92.0855C412.294 92.0617 412.334 92.0448 412.372 92.0197C412.468 91.958 412.556 91.8835 412.641 91.8072C412.655 91.7932 412.672 91.7839 412.686 91.7711C412.781 91.6785 412.868 91.5766 412.946 91.4707C412.946 91.4689 412.946 91.4689 412.946 91.4689C413.187 91.1382 413.333 90.7399 413.357 90.3102H413.369V50.0081C413.369 39.3201 422.028 30.655 432.709 30.655C443.389 30.655 452.047 39.3201 452.047 50.0081L452.056 83.6952L452.058 83.6835C452.058 83.7132 452.063 83.7441 452.063 83.7761V90.3102H452.076C452.139 91.4579 453.089 92.3796 454.251 92.3796H463.864C464.012 92.3796 464.156 92.3621 464.295 92.3347C464.352 92.3243 464.404 92.3015 464.46 92.2858C464.538 92.2631 464.619 92.2433 464.695 92.213C464.773 92.1804 464.845 92.135 464.92 92.0931C464.965 92.0675 465.013 92.0489 465.056 92.0197C465.145 91.9615 465.226 91.8911 465.306 91.8212C465.326 91.8026 465.349 91.7886 465.368 91.7694C465.459 91.6814 465.54 91.5865 465.615 91.487C465.62 91.4794 465.626 91.4736 465.632 91.466C465.868 91.1382 466.013 90.7428 466.038 90.3161C466.038 90.3131 466.039 90.3102 466.039 90.3102H466.052V85.86L466.05 85.8589" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M365.94 83.5127C366.276 87.3387 369.336 92.2088 374.638 92.2088H377.74C378.943 92.2088 379.927 91.223 379.927 90.0195V21.7945H379.915C379.852 20.6452 378.901 19.7246 377.74 19.7246H368.128C366.965 19.7246 366.016 20.6452 365.951 21.7945H365.94V27.3382C360.05 20.0786 350.764 17.0654 341.453 17.0654C320.288 17.0654 303.131 34.2362 303.131 55.4188C303.131 76.6025 320.288 93.7739 341.453 93.7739V93.7756C350.764 93.7756 360.912 90.1604 365.939 83.504L365.94 83.5127V83.5127ZM341.49 80.3506C328.03 80.3506 317.117 69.1893 317.117 55.4189C317.117 41.6509 328.03 30.489 341.49 30.489C354.952 30.489 365.862 41.6509 365.862 55.4189C365.862 69.1893 354.952 80.3506 341.49 80.3506V80.3506Z" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M246.284 73.7415C252.702 78.1905 259.706 80.3513 266.437 80.3513C272.85 80.3513 279.479 77.0242 279.479 71.2337C279.479 63.5024 265.033 62.2995 255.957 59.2124C246.88 56.1252 239.061 49.7437 239.061 39.4092C239.061 23.5956 253.14 17.0645 266.281 17.0645C274.607 17.0645 283.198 19.8121 288.767 23.7482C290.686 25.2027 289.517 26.8726 289.517 26.8726L284.201 34.4716C283.603 35.3276 282.559 36.067 281.059 35.1407C279.559 34.2149 274.298 30.4884 266.281 30.4884C258.263 30.4884 253.434 34.1939 253.434 38.7868C253.434 44.2943 259.711 46.0266 267.063 47.9038C279.875 51.36 293.852 55.5144 293.852 71.2337C293.852 85.1665 280.829 93.777 266.437 93.777C255.53 93.777 246.244 90.6654 238.456 84.9459C236.834 83.3208 237.967 81.8121 237.967 81.8121L243.257 74.2515C244.334 72.8378 245.691 73.331 246.284 73.7415" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M209.331 83.5127C209.668 87.3387 212.728 92.2088 218.03 92.2088H221.132C222.334 92.2088 223.32 91.223 223.32 90.0195V21.7945H223.307C223.244 20.6452 222.294 19.7246 221.132 19.7246H211.519C210.357 19.7246 209.408 20.6452 209.343 21.7945H209.331V27.3382C203.442 20.0786 194.156 17.0654 184.845 17.0654C163.68 17.0654 146.522 34.2362 146.522 55.4188C146.522 76.6025 163.68 93.7739 184.845 93.7739V93.7756C194.156 93.7756 204.304 90.1604 209.33 83.504L209.331 83.5127V83.5127ZM184.883 80.3506C171.422 80.3506 160.509 69.1893 160.509 55.4189C160.509 41.6509 171.422 30.489 184.883 30.489C198.343 30.489 209.255 41.6509 209.255 55.4189C209.255 69.1893 198.343 80.3506 184.883 80.3506V80.3506Z" fill="#690031"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M92.794 58.0274C78.5507 58.0274 67.0041 69.5741 67.0041 83.8185C67.0041 98.0618 78.5507 109.608 92.794 109.608C107.037 109.608 118.584 98.0618 118.584 83.8185C118.584 69.5741 107.037 58.0274 92.794 58.0274V58.0274ZM25.7899 58.0298C11.5466 58.0298 0 69.5741 0 83.8186C0 98.0618 11.5466 109.608 25.7899 109.608C40.0338 109.608 51.581 98.0618 51.581 83.8186C51.581 69.5741 40.0338 58.0298 25.7899 58.0298V58.0298ZM85.0815 25.7894C85.0815 40.0338 73.5354 51.5816 59.2921 51.5816C45.0483 51.5816 33.5022 40.0338 33.5022 25.7894C33.5022 11.5478 45.0483 0 59.2921 0C73.5354 0 85.0815 11.5478 85.0815 25.7894V25.7894Z" fill="#FF584A"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="256px" height="256px" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
<g>
<circle fill="#F05537" cx="128" cy="128" r="128"></circle>
<path d="M117.475323,82.7290398 C136.772428,78.4407943 156.069532,86.3025777 166.790146,101.311437 L81.5017079,120.608542 C84.3605382,102.26438 98.1782181,87.0172853 117.475323,82.7290398 Z M167.266618,153.48509 C160.596014,163.252761 150.351872,170.161601 138.678314,172.782195 C119.38121,177.070441 99.8458692,169.208657 89.1252554,153.961562 L174.651929,134.664457 L188.469609,131.567391 L215.152026,125.611495 C214.91379,119.893834 214.199082,114.176173 213.007903,108.696749 C202.287289,62.7172275 155.354825,33.8906884 108.42236,44.6113021 C61.4898956,55.3319159 32.1868848,101.073201 43.1457344,147.290958 C54.1045839,193.508715 100.798813,222.097018 147.731277,211.376404 C175.366637,205.182272 196.807864,186.599875 207.766714,163.014525 L167.266618,153.48509 L167.266618,153.48509 Z" fill="#FFFFFF" fill-rule="nonzero"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -4,7 +4,6 @@ import { useQueryClient } from '@tanstack/react-query';
import { FlowPropType } from 'propTypes/propTypes';
import ReactFlow, { useNodesState, useEdgesState, addEdge } from 'reactflow';
import 'reactflow/dist/style.css';
import { Stack } from '@mui/material';
import { UPDATE_STEP } from 'graphql/mutations/update-step';
import { useAutoLayout } from './useAutoLayout';
@@ -246,6 +245,7 @@ const EditorNew = ({ flow }) => {
zoomOnPinch={false}
zoomOnDoubleClick={false}
panActivationKeyCode={null}
proOptions={{ hideAttribution: true }}
/>
</EditorWrapper>
);