actions/create-project/create-project.mjs
import asana from "../../asana.app.mjs"; import constants from "../common/constants.mjs"; export default { key: "asana-create-project", name: "Create Project", description: "Create a new project in a workspace or team. [See the documentation](https://developers.asana.com/docs/create-a-project)", version: "0.10.5", annotations: { destructiveHint: false, openWorldHint: true, readOnlyHint: false, }, type: "action", props: { asana, workspace: { label: "Workspace", description: "GID of a workspace.", type: "string", propDefinition: [ asana, "workspaces", ], }, team: { propDefinition: [ asana, "teams", ({ workspace }) => ({ workspace, }), ], type: "string", label: "Team", description: "The team that this project is shared with. If the workspace for your project is an organization, you must supply a team to share the project with", }, name: { label: "Name", description: "Name of the project. This is generally a short sentence fragment that fits on a line in the UI for maximum readability. However, it can be longer.", type: "string", }, notes: { label: "Notes", description: "Free-form textual information associated with the project (ie., its description).", type: "string", }, color: { label: "Color", description: "The color associated with the status update", type: "string", options: constants.COLORS, optional: true, }, title: { label: "Title", description: "The title of the project status update.", type: "string", optional: true, }, defaultView: { label: "Default View", description: "The default view (list, board, calendar, or timeline) of a project", type: "string", options: [ "list", "board", "calendar", "timeline", ], default: "calendar", optional: true, }, privacySetting: { label: "Privacy Setting", description: "The privacy setting of the project. Note: Administrators in your organization may restrict the values of `privacy_setting`.", type: "string", optional: true, options: [ "public_to_workspace", "private_to_team", "private", ], }, archived: { label: "Archived", description: "Archived projects do not show in the UI by default and may be treated differently for queries", type: "boolean", optional: true, default: false, }, dueOn: { label: "Due On", description: "The day on which this project is due. This takes a date with format YYYY-MM-DD.", type: "string", optional: true, }, startOn: { label: "Start On", description: "The day on which work for this project begins. This takes a date with format YYYY-MM-DD. `Due On` must be present in the request when setting or unsetting the `Start On` parameter. Additionally, `Start On` and `Due On` cannot be the same date.", type: "string", optional: true, }, followers: { label: "Followers", description: "Comma separated string of users. Followers are a subset of members who have opted in to receive \"tasks added\" notifications for a project.", type: "string[]", optional: true, propDefinition: [ asana, "users", ({ workspace }) => ({ workspace, }), ], }, htmlNotes: { label: "HTML Notes", description: "The notes of the project with formatting as HTML", type: "string", optional: true, }, owner: { label: "Owner", description: "The current owner of the project", type: "string", optional: true, propDefinition: [ asana, "users", ({ workspace }) => ({ workspace, }), ], }, defaultAccessLevel: { type: "string", label: "Default Access Level", description: "The default access for users or teams who join or are added as members to the project", optional: true, options: [ "admin", "editor", "commenter", "viewer", ], }, minimumAccessLevelForCustomization: { type: "string", label: "Minimum Access Level for Customization", description: "The minimum access level needed for project members to modify this project's workflow and appearance", optional: true, options: [ "admin", "editor", ], }, minimumAccessLevelForSharing: { type: "string", label: "Minimum Access Level for Sharing", description: "The minimum access level needed for project members to share the project with others", optional: true, options: [ "admin", "editor", ], }, }, async run({ $ }) { const response = await this.asana._makeRequest({ path: "projects", method: "post", data: { data: { name: this.name, notes: this.notes, team: this.team, color: this.color, workspace: this.workspace, default_view: this.defaultView, title: this.title, privacy_setting: this.privacySetting, archived: this.archived, due_on: this.dueOn, start_on: this.startOn, followers: this.followers, html_notes: this.htmlNotes, owner: this.owner, default_access_level: this.defaultAccessLevel, minimum_access_level_for_customization: this.minimumAccessLevelForCustomization, minimum_access_level_for_sharing: this.minimumAccessLevelForSharing, }, }, $, }); $.export("$summary", `Successfully created project with GID: ${response.data.gid}`); return response; }, };