Giter VIP home page Giter VIP logo

tissues's Introduction

tissues

A Linear CLI client to display dashboards of multiple custom views (issues) and allow for fast modification.

Motivation

Linear doesn't currently support viewing multiple custom views simultaneously. This project provides a simple Linear client TUI which queries (via the Linear API) issues from custom views, allows the user to display in a customizable dashboard, modify issues (incl. editing content), as well as pagination, caching, and a variety of other helpful improvements.

Tests are included; however, be aware that on most recent verification, certain aspects of the Linear Custom View API remained broken, as confirmed by the Linear team. Bug reports have been submitted, but fixes are a low priority.

Future Goals

  • Support for Github
  • Support for Workflows
  • Improvements to column layout framework, resize handling, formatting
  • And much more

tissues's People

Contributors

kgodara avatar

Stargazers

 avatar

Watchers

 avatar

tissues's Issues

Implement Custom View Selection Route and Component

Implement a Route and Component which provides a selectable menu of Custom Views from which a single one can be selected.

On Selection of a Custom View, trigger the Custom View Resolver with the relevant filter object.

Implement Table Column Layout & Resizing Framework

Expected Behavior:

  • Table columns able to be specified with: minimum-width, priority, and label.
  • Table columns resize correctly in response to layout changes, first attempting to claim enough space within a table for each column's minimum width, then attempting to claim enough any more space as specified by column priority.

Implement Custom View 'team' Resolver

Implement a resolver for Custom View 'team' filters. The 'team' filter can either be null (all teams) or a team object (issues from only one team). This filter will be considered an indirect filter which will not be directly queried.

Behavior in ViewLoader strategies:

  • DirectQueryPaginate: Apply on fetched issues
  • GenericIssuePaginate: If a team is selected (not all teams) query for the issues from that team, otherwise query on all issues.

"filters": { "team": { "id": "3e2c3a3a-c883-432f-9877-dcbb8785650a", "name": "Test-1", "key": "TES", "description": null } }

Implement Custom View 'creator' Resolver

Implement a resolver which can use the 'creator' attribute of a custom view filter in order to fetch issues matching the provided Creator list.

Example of Creator Filter:
"filters": { "creator": [ { "ref": "ce943fa6-e9e1-4bc5-8131-ebf3ab1928bf", "value": "ce943fa6-e9e1-4bc5-8131-ebf3ab1928bf" } ], },

Implement Custom View 'subscriber' Resolver

Implement a resolver which can use the 'subscriber' attribute of a custom view filter in order to fetch issues matching the provided Subscribers.

Example of Subscriber Filter :

"filters": { "subscribers": [ { "ref": "ce943fa6-e9e1-4bc5-8131-ebf3ab1928bf", "value": "ce943fa6-e9e1-4bc5-8131-ebf3ab1928bf" } ] },

Implement Command Bar for View Panel Display

Expected Behavior: When selecting and interacting with issues displayed in a view panel I should be able to see a highlighted list of available actions (with corresponding keyboard shortcuts) I can take on the selected issue (e.g. change workflow state, etc).

Implement Custom View 'labels' Resolver ('No Label' not included)

Implement a resolver which can use the 'labels' attribute of a custom view filter in order to fetch issues matching the provided Label list.

Example of Label Filter (No Label filter included) :

"filters": { "labels": [ {}, { "ref": "5e948c53-e672-46d7-b2a7-dc2194ae67b4", "value": "bug" }, { "ref": "3c053660-ea0c-4804-9fe5-e206ee40bd17", "value": "test-label-1" } ] },

Implement View Loader Creation From Filter

Create a ViewLoader struct from a Custom View Filter.

The View Loader struct will be responsible for managing initial issue loads for a custom view (will encode filter, decide loading strategy) as well as maintaining all state required for Custom View Issue Pagination.

Implement Custom View 'status' Resolver

Implement a resolver which can use the state attribute of a custom view filter in order to fetch issues matching the provided workflow states.

Example of Workflow State Filter:
"filters": { "state": [ { "ref": "e4d5a438-381e-44b0-945f-211481f769e6", "value": "test-column-1" } ] }

Implement Custom View 'assignee' Resolver ('No Assignee' not included)

Implement a resolver which can use the assignee attribute of a custom view filter in order to fetch issues matching the provided Assignee list.

Example of Assignee Filter (No Assignee filter included) :
"filters": { "assignee": [ { "ref": "ce943fa6-e9e1-4bc5-8131-ebf3ab1928bf", "value": "ce943fa6-e9e1-4bc5-8131-ebf3ab1928bf" }, {} ] },

Implement Custom View 'priority' Resolver

Implement a resolver which can use the 'priority' attribute of a custom view filter in order to fetch issues matching the provided Priorities.

Example of Priority Filter :

"filters": { "priority": [ { "ref": 2, "value": 2 }, { "ref": 1, "value": 1 }, { "ref": 3, "value": 3 } ] },

Implement Custom View 'project' Resolver

Implement a resolver which can use the 'project' attribute of a custom view filter in order to fetch issues matching the provided Project.

Example of Project Filter (No Project filter included) :

"filters": { "project": [ {}, { "ref": "34197686-1d88-47ec-a1e0-321d9144eacd", "value": "34197686-1d88-47ec-a1e0-321d9144eacd" } ] },

Implement Linear Teams Initial Timezone Load

At application start, paginate through all team objects within given organization (from PAT), and populate a HashMap mapping a team id to a timezone location.

Both the HashMap as well as a flag for timezone load state should be added to the 'App' struct.

Create Keyboard Shortcuts to Sort Issue Display By Attributes

Plan: Implement two separate classes of shortcut Commands: Sorting and Filtering.
Questions:

  • Should these shortcuts always make new API requests?
  • Is there ever a case where they can modify the display in place?

Answers:

  • Sort Commands should always make new API requests to get a paginated list of ordered Issues
  • Filter Commands should initially be implemented to always make new API requests.

Refactor Custom View Filter Validation on Issues

Custom Views currently expect all of their filters except for filters within the same group as a directly queried filter to match for any given issue within a view; however, this is inaccurate, only one filter from each filter group present within the custom view needs to match.

Example:
Ignorable Filters needs to be included in the comparison process since, e.g.
if we have a Filter with two SelectedLabel filters and two SelectedState filters
and we are querying on one of the SelectedLabel filters, this method will correctly ignore the non-queried SelectedLabel filter
but it will expect both SelectedState filters to be applied simultaneously to the issue

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.