Git Product home page Git Product logo

lowcoder-org / lowcoder Goto Github PK

View Code? Open in Web Editor NEW
524.0 15.0 129.0 193.16 MB

🔥 🔥 🔥 The Open Source Retool, Tooljet and Appsmith Alternative

Home Page: https://www.lowcoder.cloud/

License: GNU Affero General Public License v3.0

Shell 0.10% JavaScript 16.24% Java 24.56% TypeScript 58.69% CSS 0.01% HTML 0.19% Smarty 0.05% Dockerfile 0.12% Less 0.04%
app-editor admin-panel api-rest application customer-application lowcode-editor mobile-web rapid-development

lowcoder's Introduction

Note
Lowcoder continues from the abandoned Openblocks project. For more information read our manifesto.

Lowcoder

This is the only Platform, which closes the gap between App Development, Website Development and Slide-Presentations.

Create software applications (internal and customer-facing!) and Meeting/Collaboration tools for your Company and your Customers with minimal coding experience.

Lowcoder is the best Retool, Appsmith or Tooljet Alternative.

📢 Use Lowcoder in 3 steps

  1. Connect to any data sources or APIs.
  2. Build UI with 60+ components.
  3. Share with colleagues and customers.

💡 Why Lowcoder

It's cumbersome to create a single app. You had to design user interfaces, write code in multiple languages and frameworks, and understand how all of that code works together.

Low-code/No-code platforms are fast to get started with but quickly become unmaintainable and inflexible. This creates more problems than it solves.

NewGen Lowcode Platforms like Retool and others are great for their simplicity and flexibility - like Lowcoder too, but they can also be limited in different ways, especially when it comes to "external" applications for everyone.

Lowcoder wants to take a step forward. More specifically, Lowcoder is:

  • An all-in-one IDE to create internal or customer-facing (external) apps.
  • A place to create, build and share building blocks of web applications.
  • The tool and community to support your business, and lower the cost and time to develop interactive applications.
  • The only platform to embed Lowcode Apps natively in Websites (no iFrame!)
  • The only platform where you can build your own Meeting Tool - like Teams, Zoom or Google Meets, - just in the Lowcode way.

🪄 Features

  • Visual UI builder with 50+ built-in components. Save 90% of time to build apps.

  • Modules for reusable (!) component sets in the UI builder.

  • Embed Lowcoder Apps as native parts of any Website instead of iFrame (!). Demo

  • Video Meeting Components to create your own individual Web-Meeting tool.

  • Query Library for reusable data queries of your data sources.

  • Custom components to develop own components and use them in the UI builder.

  • Native Data connections to PostgreSQL, MongoDB, MySQL, Redis, Elasticsearch, REST API, SMTP, etc.

  • Stream Data connections to Websockets for realtime data updates & collaboration

  • JavaScript supported everywhere to transform data, control components, etc.

  • Role-based access control (RBAC) for granular permission management.

  • Auto-saved and restorable history for release and version control.

  • App Themes and Theme Editor to precisely align with your company's brand guidelines.

  • Self Hosting to use Lowcoder in your internal company network, even behind the firewall.

  • Free Community Cloud to start within a minute and build your first Apps. Start here

🏆 Comparisons

Lowcoder vs Teams, Google Meets, Zoom

  • build a Meeting tool with peace in mind. Blue buttons - ok. Red corners or circle Videostream - ok too.
  • embedd applications in your Video-Meetings, so attendees can enjoy collaborative "anything". From shopping to working and gaming...

Lowcoder vs Powerapps

  • build a apps way faster than in Power Apps. Save up to 50& of the time and costs at least.
  • Use self-hosting to keep all apps and data under your control for example at the own baremetals.

Lowcoder vs Retool

  • Lowcoder is open-source. You don't need to worry about vendor lock-in or being stuck with an outdated version of the software.
  • In Lowcoder, developers can build truly responsive apps - not as cumbersome as the "Desktop / Mobile switch" in Retool
  • Lowcoder is free and you can contribute!
  • The EE Version of Lowcoder comes with a much better pricing model, so you have no "per-user costs".

Lowcoder vs Appsmith, Tooljet

  • Lowcoder has more components and richer configuration than Appsmith and Tooljet.
  • In Lowcoder, you can choose auto-height or fixed-height mode for your components, while Appsmith supports fixed-height mode only.
  • In Lowcoder, you can reuse common structures when building apps with modules and query library features.

Lowcoder vs Mendix, Outsystems, Pega

  • Lowcoder is modern. The codebase is fresh and uses modern standards.
  • Lowcoder Apps do not need a compile and deployment. Just publish and use. Within seconds!
  • Lowcoder Apps can get embedded natively in websites and apps, even in mobile apps.

Lowcoder vs internal Tool platforms

  • Lowcoder supports internal tools like admin panels perfectly, but also customer-facing apps can get developed and published.
  • The Lowcoder UI builder is straightforward and better to use than Bubble.
  • App release cycles and updates can be done nearly daily without service downtimes for customers and users.

👐 Support and Community

If you have any questions, please feel free to contact us or share them with our community. Our team is here ready to help. And we mean it... Day by day!

📮 Best way is to chat with us on Discord

📑 Search for solutions in our Documentation

🔎 Submit an issue here on GitHub

💻 Deployment Options

Deploy to AWS using Stitch

You can access Lowcoder from cloud-hosted version at any time, or use the following resources for self-host Lowcoder on different platforms:

💪 Contributing

  • Language support: If you have experience with a language that isn't currently supported by our product, send us a pull request.
  • Create and share components or demos: If you've created something that might be useful to others, add the link here.
  • Frontend contributing guide

🥇 Sponsors

Accelerate the growth of Lowcoder and unleash its potential with your Sponsorship – together, we're shaping the future of Lowcode for everyone! Be a Sponsor

Like ... @spacegoats-io, @Jomedya, @CHSchuepfer, Thank you very much!!

lowcoder's People

Contributors

aaron1604 avatar aq-ikhwa-tech avatar dependabot[bot] avatar elee1766 avatar esieve avatar falkwolsky avatar falnyr avatar freddysundowner avatar ggbond2077 avatar hanshuai avatar imtananikhwa avatar jerry-goodman avatar joenan avatar lmx1117 avatar louga31 avatar ludomikula avatar lvhuichao avatar mousheng avatar nangelov7 avatar neon-balcony avatar onkee avatar pillowbalcony avatar raheeliftikhar5 avatar ronen770 avatar sarike avatar snowe2010 avatar sudoischenny avatar wasserpanther avatar yojayz avatar zaini avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lowcoder's Issues

[Feat]: Add link to editing your module

I used multi modules but sometimes I need editing function from module.

Solution is simply, add a link to module or add in right slide all properties of module.

Thank you

[Feat]: Independent User Group Application

Is your feature request related to a problem? Please describe.
Each user group can have their own user homepage application. If there are multiple user groups, switching between multiple applications is possible.

If a default homepage application has already been set in the advanced settings, it will be displayed and switched together. If no default homepage application is set in the advanced settings by default, users under each user group can enter their own homepage application.

Describe the solution you'd like
Task

  • Can set a homepage application for each user group
  • The Java backend interface saves the user group application settings
  • Multiple user group application switching page

[Feat]: Lowcoder API route api/v1/users/me should not contain data from workspaces/organizations

Is your feature request related to a problem? Please describe.
Lowcoder Client calls often the /me API endpoint, which should deliver information about the logged in user. However, by the Domain Design and API binding, it gives rich content also about the workspaces/organizations in the response.

Describe the solution you'd like
Under the node "orgAndRoles" only Metadata of organization should get delivered. We need to check, if the other data is needed by the client.

[Bug]: Performance issue in Table Component when using children

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I've discovered that when an entry in the table has an children-array, it will add an expand/collapse button to that row. Very neat!

However, it appears there is a significant performance issue when this feature is used. It's okay for tables with only a handful of rows. But once there is a lot to expand/collapse (my nested levels can go up to 4), the performance of the application will drop drastically.

When I show the same data as a flat list, it's pretty much a consistent performance.

I've made sure to check it's not my query or the logic before the table updates. It's not, the query runs and returns a (nested) result pretty much instantly.

Expected Behavior

Preferably loading the data into the table is just as fast as loading the flat list. However, keeping the application responsive (so not hanging the browser rendering) should be the priority.

Steps to reproduce

Have a big tree with lots of data. My object looks like this:

{
    id: 1234,
    type: "string",
    state: "string",
    parent: 1234,
    title: "string",
    priority: 1234,
    children: [], //Contains a list of this object again, up to 4 deep.
    data1: 1234,
    data2: 1234
}

I'd say test a very extreme scenario. I have 20 root items, each of which has about 3 childs, these have at least 20 childs each, which have about 4 childs each.

Environment

No response

Additional Information

No response

[Bug]: uuid does not seem to execute on selection change trigger

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

First of all thank you for continuing this awesome work! This is an great project and I'm really enjoying trying it out.

I have created a form with a selection dropdown, that triggers on Changed event to set a temporary state to the value uuid.v1().
Screenshot from 2023-05-11 11-28-31

As you can see in the image, uuid.v1() does run and the state is set correctly, which is great. However, it does not trigger when the selection is changed each time, or perhaps, it does run uuid.v1() but the value is the same somehow.

I opened up the browser console and running uuid.v1() repeatedly gave random uuids as expected

Thanks in advance!

Expected Behavior

I expected project_state.id to be updated to a new random UUID each time the selection is changed for the dropdown

Steps to reproduce

  1. create a new app
  2. add a new Select component
  3. add a new temporary state
  4. add Select component's Properties > Interaction > Event handler like so:
    Selection_028
  5. open up temporary state on left sidebar to view its value
  6. change selection for the Select component between the default Options 1 and 2.
  7. The temporary state remains the same value when it should have changed each time randomly

Environment

Ubuntu, just trying it out on https://app.lowcoder.cloud/

Additional Information

No response

[Bug]: Something is up with authorization on the OpenAPI data sources

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I've tried two OpenAPI specs:

No matter the values I tried, I could never get the API's to properly authenticate. Whereas if I use the plain REST API and setup the authorization headers accordingly, the endpoint work fine.

Expected Behavior

The API's actually authenticate properly depending on their type.

Steps to reproduce

Use the above OpenAPI specs, or find something else you as a developer have access to, and try to get the different types of authorization to work.

Environment

No response

Additional Information

I've tried to go through the code and see if I could spot something glaringly wrong. I couldn't, but I have a feeling the authorization headers aren't properly set on the fetch-request. That said, I will see if I can inspect it using the Inspector... Nope.

[Feat]: Add a number column type to the table component

Is your feature request related to a problem? Please describe.
I have a table column containing numbers that I want to make editable. The column type selection is missing a number type. Therefore, I have no way of making sure that the user input will be a number. This is a very important functionality because having editable numbers in tables is very common.

Describe the solution you'd like

  • Having a number column type that restricts the user input to number values.
  • Having number options like precision, stepper buttons etc.
  • Having the possibility to chose meta types like currency, percent etc. (these could also be implemented as their own column types)

Describe alternatives you've considered
Imho there's no other way to solve this without a native implementation.

[Bug]: Workspaces do not seem to be available

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

The feature described here is not available in the self-hosted version created using the Docker compose file.

There is no "Create workspace" button. Also an issue on Openblocks.

Expected Behavior

There is a "Create workspace" button.

Steps to reproduce

Install Lowcoder, register an account, go to Workspaces.

Environment

No response

Additional Information

No response

[Feat]: Add a way to reset password

Is your feature request related to a problem? Please describe.
Currently, there is no way to reset a password on Lowcoder Cloud if you have forgotten it. This can be a problem if you have lost access to your email address or if you have been hacked.

Describe the solution you'd like
I suggest that Lowcoder add a way to reset passwords, such as by sending a password reset link to the user's email address or by allowing users to answer security questions to reset their passwords.

[Feat]: Support full screen app on Apple devices

Is your feature request related to a problem? Please describe.
Unable to add an app to the home screen on apple device so it opens full screen and not within the window of a browser.

Describe the solution you'd like
To have <meta name=”apple-mobile-web-app-capable” content=”yes “> added to the metadata on all pages.

Describe alternatives you've considered
I have not tried this but was advised this metadata could be injected using java script on the page load.

Additional context
Given many users may want to use their apps in full screen on an apple device, it would be preferrable have this as a default setting on all apps.

[Feat]:Autocomplete selection control

Is your feature request related to a problem? Please describe.
While trying to load 72k rows in Select control we observed that take very long time to load as all the values are fetched from database.

Describe the solution you'd like
In place of Select if a new component is created that will look like a simple Input Text control but it will be bound/mapped to data source and when user types something it will show a list of item which are filtered as per users entered text.

Describe alternatives you've considered
I think one way to achieve this would be to put a Textbox control and then when user types to run a query to fetch data based on user entered text and show the list of items from which user can select by clicking on and Item.

Additional context
Here is a sample screen shot of what we have been using in other low-code tools.
image

[Feat]: Add the option to hide the table footer

Is your feature request related to a problem? Please describe.
I have a case where I don't need the user to download or filter the data. Moreover there's no need of pagination. I have disabled these features and the table footer is still there, as a white space without function.
Bildschirmfoto 2023-06-18 um 08 49 55

Describe the solution you'd like
I'd like to be able to hide the table footer like I can with the header.

[Feat]:Allow to download a personal plugin via a private registry

Is your feature request related to a problem? Please describe.
Currently, plugins can only be downloaded from the npm registry.

Describe the solution you'd like
It would be interesting for a Lowcoder developer to be able to choose the registry via which he wants to fetch a plugin that he has developed beforehand :

  • There could be a "Plugin registries" section (or something like that) next to the "Data Sources", "Settings" and "Query Library" sections on the home page.
  • In the Lowcoder design interface --> "Insert" tab --> "Extensions" button --> provide a drop-down menu (or similar) to choose the registry to use.

Describe alternatives you've considered
No alternative for instance.

Additional context
home page menu
extensions menu modified

[Bug]: The backend JAVA api-service cannot be packaged

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I follow the following documents to package and debug the backend JAVA api-service.
https://github.com/lowcoder-org/lowcoder/tree/main/server/api-service
However, the compilation has not been completed, and the log shows that it cannot continue after this part.
log Comment below to add

Expected Behavior

Compiled normally

Steps to reproduce

Compile according to the following URL
https://github.com/lowcoder-org/lowcoder/tree/main/server/api-service

Environment

No response

Additional Information

No response

[Feat]: Backup and Restore a whole Workspace

Is your feature request related to a problem? Please describe.
Currently it is possible to export the JSON definition files for Apps, Data Queries etc. individually. However, it could be a lot of them over time in a Workspace. This makes it hard to move things to another Workspace or Lowcoder Installation.

Describe the solution you'd like
On an Export / Import Page it should be possible to see all resources of a Workspace and choose which of them to export in a single JSON Export file. Same time it must be possible to import selected Resources from such JSON Export file.

[Feat]: Make max-request-size and max-file-size configurable via ENV

Is your feature request related to a problem? Please describe.
Currently, we are not able to configure the maximal data size for POST requests to the Lowcoder API.
This is relevant to control the max size for File-Upload and use of S3 Plugin for example.

Describe the solution you'd like
A ENV Variable should allow to control of the max-request-size and max-file-size for the Java environment.

Describe alternatives you've considered

Additional context
Add any other context or screenshots about the feature request here.

[Feat]: Allow to export/import themes

Is your feature request related to a problem? Please describe.
Hi there!
An idea for a new feature: would it be possible to export/import themes, plz?

Describe the solution you'd like

Describe alternatives you've considered

Additional context

[Bug]: Custom components cannot be used

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I place the custom component to the canvas.
The code in the settings is not working.
Only the following is shown:

image

The component found in the code snippet of the custom component will visit the specific address by default.

image image

Components will access:
https://custom-component.lowcoder.dev/index.html

Expected Behavior

Implement the description in the following documentation on the custom component
https://github.com/lowcoder-org/lowcoder/blob/main/docs/build-apps/component-guides/custom-component.md

Steps to reproduce

In the app editor, drag and drop custom components onto the canvas.

Environment

No response

Additional Information

No response

[Bug]: The i18n locales profile for lowcoder-comps does not work

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

image
image

I set up the i18n locales file in the lowcoder-comps directory.
But it doesn't translate as it is set, it still keeps the original English content.

Expected Behavior

Translation according to i18n locales file.

Steps to reproduce

lowcoder-comps i18n locales zh.ts file changed to the following
Next, open the designer, place a chart, and view the chart setup options.

export const zh = {
    chart: {
        delete: "删除",
        data: "数据",
        mode: "模式",
        config: "配置",
        UIMode: "UI模式",
        chartType: "图表类型",
        xAxis: "X轴",
        chartSeries: "图表系列",
        customSeries: "自定义系列",
        add: "添加",
        confirmDelete: "确认删除:",
        seriesName: "系列名称",
        dataColumns: "数据列",
        title: "标题",
        xAxisDirection: "X轴方向",
        xAxisName: "X轴名称",
        xAxisType: "X轴类型",
        xAxisTypeTooltip: "默认情况下,根据X轴数据自动检测.有关类型描述,请参考:",
        logBase: "对数底数",
        yAxisName: "Y轴名称",
        yAxisType: "Y轴类型",
        yAxisDataFormat: "Y轴数据格式",
        yAxisDataFormatTooltip: `值表示每个坐标的值.示例:'{{value * 100 + "%"}}'`,
        basicBar: "基本柱状图",
        stackedBar: "堆叠柱状图",
        barType: "柱状图类型",
        categoryAxis: "分类轴",
        valueAxis: "值轴",
        timeAxis: "时间轴",
        logAxis: "对数轴",
        auto: "自动",
        legendPosition: "图例位置",
        basicLine: "基本折线图",
        stackedLine: "堆叠折线图",
        areaLine: "区域折线图",
        smooth: "平滑曲线",
        lineType: "折线图类型",
        basicPie: "基本饼图",
        doughnutPie: "环形饼图",
        rosePie: "玫瑰饼图",
        pieType: "饼图类型",
        spending: "支出",
        budget: "预算",
        bar: "柱状图",
        line: "折线图",
        scatter: "散点图",
        pie: "饼图",
        horizontal: "水平",
        vertical: "垂直",
        noData: "无数据",
        unknown: "未知",
        select: "选择",
        unSelect: "取消选择",
        echartsOptionLabel: "选项",
        echartsOptionTooltip: "ECharts选项",
        echartsOptionExamples: "ECharts示例",
        selectDesc: "当用户选择图表中的部分数据时触发",
        unselectDesc: "当用户取消选择图表中的部分数据时触发",
        selectedPointsDesc: "已选中的数据点",
        dataDesc: "当前图表使用的原始数据",
        titleDesc: "当前图表标题",
        scatterShape: "散点形状",
        circle: "圆形",
        rect: "矩形",
        triangle: "三角形",
        diamond: "菱形",
        pin: "图钉",
        arrow: "箭头",
        pointColorLabel: "数据点颜色",
        pointColorTooltip: `根据系列名称和当前数据点值设置数据点颜色,可选变量:seriesName、value.示例:'{{value < 25000 ? "red" : "green"}}'`,
    },
    imageEditor: {
        defaultSrc: "",
        save: "保存",
        saveDesc: "保存图像",
        src: "图像来源",
        name: "图像名称",
        buttonText: "按钮文本",
        srcDesc: "图像来源",
        nameDesc: "图像名称",
        dataURIDesc: "图像数据URI",
        dataDesc: "图像数据",
        buttonTextDesc: "按钮文本",
    },
    calendar: {
        events: "事件数据",
        editable: "可编辑",
        defaultDate: "默认日期",
        defaultDateTooltip: "日历最初显示的日期",
        defaultView: "默认视图",
        defaultViewTooltip: "日历最初显示的视图",
        showEventTime: "显示事件时间",
        showEventTimeTooltip: "是否显示事件的时间文本",
        showWeekends: "显示周末",
        showAllDay: "显示全天",
        showAllDayTooltip: "是否在周视图和日视图中显示全天时间段",
        dayMaxEvents: "每日最多事件数",
        dayMaxEventsTooltip: "在月视图中每天显示的事件最大数量,为0表示限制为单元格的高度",
        eventMaxStack: "事件最大堆叠数",
        eventMaxStackTooltip: "在周视图和日视图中水平堆叠的事件的最大数量,为0表示没有限制",
        selectInterval: "日历上选择的时间间隔",
        selectEvent: "已选事件",
        changeSet: "拖动日历中更改的事件对象,键为eventId,值为事件对象",
        headerBtnBackground: "按钮背景",
        btnText: "按钮文本",
        title: "标题",
        selectBackground: "选择背景",
        today: "今天",
        month: "月",
        week: "周",
        day: "日",
        list: "列表",
        monday: "星期一",
        tuesday: "星期二",
        wednesday: "星期三",
        thursday: "星期四",
        friday: "星期五",
        saturday: "星期六",
        sunday: "星期日",
        startWeek: "起始星期",
        creatEvent: "创建事件",
        editEvent: "编辑事件",
        eventName: "事件名称",
        eventColor: "事件颜色",
        eventGroupId: "分组ID",
        groupIdTooltip: "分组ID用于将不同的事件分组,同一组内的事件可以一起拖动和调整大小.",
        more: "更多",
        allDay: "全天",
        eventNameRequire: "请输入事件名称",
        eventId: "事件ID",
        eventIdRequire: "请输入事件ID",
        eventIdTooltip: "每个事件的唯一标识符",
        eventIdExist: "ID已存在",
    },
};

Environment

No response

Additional Information

No response

[Bug]: Default value doesn't work in select

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

When default value is added to a select, no value is selected by default.

Expected Behavior

The default value should be selected.

Steps to reproduce

  1. Add select field
  2. Give it a few options
  3. Set the default value
  4. Publish
  5. Check the frontend

Environment

No response

Additional Information

No response

[Bug]: First start tour not working

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

On step 3 of creating the app, a wrong URL is used for the user datastore. This seems a blatant find/replace of Openblocks:
https://63621db87521369cd06514c2.mockapi.io/api/lowcoder/users doesn't work, but https://63621db87521369cd06514c2.mockapi.io/api/openblocks/users does.

That said, regardless of a working URL, you are stuck on this step as the next button won't do anything. This was also an issue on Openblocks, by the way.

Expected Behavior

You can continue after step 3.

Steps to reproduce

Spin up a new instance, register an account and follow the tour.

Environment

No response

Additional Information

No response

[Feat]: Add an easy way to add translations for the community

Is your feature request related to a problem? Please describe.
I'd like to use Lowcoder in a non-english speaking language environment. I'm using the table component. The table component holds unchangeable english terms like "Save changes". I have no time and expertise to add translations for this through a PR.
Especially for end users the whole user interface must be fully translated because language mix leads to distrust and considerably reduces the user experience quality.

Describe the solution you'd like
Having a possibility to easily suggest and maintain translations for the interface within the Lowcoder platform.

Describe alternatives you've considered
A documentation for non-coders on how to add and maintain translations with GitHub.

[Feat]: Queries in Query Library need Access Control

Is your feature request related to a problem? Please describe.
When one create a Data Query in the Query Library, everyone can use this query later.

Describe the solution you'd like
Similar like for Datasources, a query in the Query Library must be subject to Access Control for Groups and / or individual Members.

Describe alternatives you've considered

Additional context

[Feature Request] Dynamic datasource

Original issue by @devendrakhatri: openblocks-dev/openblocks#297

For the use cases where we have multiple environments (DEV, UAT, PROD) and each environment has a dedicated database with exactly same schema.
Is it possible to build one dashboard with an option to switch between environments ?
With current datasource capability, looks like dashboard is tightly coupled with a specific database.

Can we think of passing datasource dynamically?

Probably we can call it "environment manager" which can manage all the base URLs, database,. etc. at single place and dashboard can switch to environments using dropdown list?

Environment Service 1 Database 1 Database 2
DEV S1_DS_Dev D1_DB_Dev D2_DB_Dev
UAT SX_DS_Uat D1_DB_Uat D2_DB_Uat
PROD SY_DS_Prod D1_DB_Prod D2_DB_Prod

Website improvements

  • Links to Docu
  • Better presentation of available components
  • individual pages for datasources, tables and navigation / modules
  • Showcase of native Integration

[Bug]: Input value does not get updated with some default values in listview

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I have some TextInput within a ListView. When I change the value of this TextInput, an event opens a notification with the current value of the TextInput. With some default values of the TextInput, the user input in this TextInput is not written in the notification.

This happens for example when the default value is taken from an object written in a temporary state. When I access the same value outside of a ListView, the notification gets the updated value as expected. When I build a trivial temporary state (i.e. just a string) the notification also receives the updated value correctly, even within the ListView.

Attached is a screenshot, where I update "input1", but the notifcation doesn't see that.

image

Expected Behavior

Referring to the screenshot, I would expect the notification to show:

Der wert ist: "State1 Variable 1 updated"

Steps to reproduce

Reproducing the problem and playing around with the problem should be possible by importing this JSON:

{"applicationInfo":{"name":"exampleapp","createAt":1684753735243,"createBy":"646b4d3c2071810ba72f0f61","applicationId":"646b4d472071810ba72f0f73","applicationType":1},"applicationDSL":{"ui":{"layout":{"c656489f":{"i":"c656489f","h":18,"w":10,"delayCollision":true,"x":4,"y":13},"fe819418":{"i":"fe819418","h":5,"w":5,"x":4,"y":32}},"items":{"c656489f":{"compType":"listView","comp":{"noOfRows":"{{state1.value[\"value\"]}}","noOfColumns":"1","itemIndexName":"i","itemDataName":"currentItem","dynamicHeight":"auto","heightUnitOfRow":"1","container":{"layout":{"bf09b461":{"i":"bf09b461","h":5,"w":13,"x":0,"y":0},"e7e6ff80":{"i":"e7e6ff80","h":5,"w":11,"x":13,"y":0}},"items":{"bf09b461":{"compType":"input","comp":{"value":"{{state1.value[\"value\"][i][\"name\"]}}","label":{"text":"Label","width":"33","widthUnit":"%","position":"row","align":"left"},"onEvent":[{"name":"change","handler":{"compType":"message","comp":{"text":"Der wert ist: \"{{input1.value}}\"","level":"info"},"condition":"","slowdown":"debounce","delay":""}}],"validationType":"Text"},"name":"input1"},"e7e6ff80":{"compType":"input","comp":{"value":"{{state2.value}}","label":{"text":"Label","width":"33","widthUnit":"%","position":"row","align":"left"},"onEvent":[{"name":"change","handler":{"compType":"message","comp":{"text":"{{input3.value}}","level":"info"},"condition":"","slowdown":"debounce","delay":""}}],"validationType":"Text"},"name":"input3"}}},"autoHeight":"auto","pagination":{"changeablePageSize":null,"pageSize":"6","pageSizeOptions":"[5, 10, 20, 50]"}},"name":"listView1"},"fe819418":{"compType":"input","comp":{"value":"{{state1.value[\"value\"][0][\"name\"]}}\n","label":{"text":"Label","width":"33","widthUnit":"%","position":"row","align":"left"},"onEvent":[{"name":"change","handler":{"compType":"message","comp":{"text":"{{input2.value}}","level":"info"},"condition":"","slowdown":"debounce","delay":""}}],"validationType":"Text"},"name":"input2"}}},"tempStates":[{"name":"state1","value":"{\"value\": [{\n  \"name\": \"State1 Variable 1\",\n}, {\n\n  \"name\": \"State1 Variable 2\",\n}]}"},{"name":"state2","value":"\"state2 variable\""}],"refTree":{"value":"","items":[{"value":"state1"},{"value":"state2"}]},"hooks":[{"compType":"urlParams","comp":{},"name":"url"},{"compType":"momentJsLib","comp":{},"name":"moment"},{"compType":"lodashJsLib","comp":{},"name":"_"},{"compType":"utils","comp":{},"name":"utils"},{"compType":"message","comp":{},"name":"message"},{"compType":"localStorage","comp":{},"name":"localStorage"},{"compType":"currentUser","comp":{},"name":"currentUser"},{"compType":"theme","comp":{},"name":"theme"}],"settings":{"maxWidth":{"dropdown":"1920","input":0},"themeId":"default"},"preload":{"script":"","css":""}}}

When you have opened this app, change the value of the fields and see which match your expectation. Every notification should return what is currently written in the field you change.

Environment

Current Docker Mainline (https://raw.githubusercontent.com/lowcoder-org/lowcoder/21e92bde50125e736f6de6e8698fb2175ef91757/deploy/docker/docker-compose.yaml)

Additional Information

No response

[Feat]: Add GraphQL auto complete

Is your feature request related to a problem? Please describe.
I need to write a lot of GraphQL queries. I'm used to do it in a GrqphiQL environment because it is much faster.

Describe the solution you'd like
I suggest integrating GraphiQL into the Lowcoder query editor. Please provide an easy way to update the schema, preferrably right inside the query editor because it's annyoing to have to reload the whole app everytime you have made changes to the database.

[Bug]: Delete of Datasource does not work

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

When i like to delete a datasource in the Menu "Datasources", only a error is displayed.
(Network error / server not to reach)(Despite the API / Server is well reachable)
Screenshot 2023-05-28 at 18 28 52
Screenshot 2023-05-28 at 18 28 47

Expected Behavior

Datasources should be able to delete.

Steps to reproduce

Create a Datasource and try to delete in the Main Menu section "Datasources"

Environment

No response

Additional Information

No response

[Feat]: Background Image for Components

Is your feature request related to a problem? Please describe.
Currently, only Background Color can be set for components. To create more expressive applications, it would be wishful to have the possibility to add Background Images to Components.

Describe the solution you'd like
Add a Property to set Background Images for Components, at least for the following Components:

  • Table
  • Container's
  • Image
  • Form
  • Signature

To do so, add the Style CSS property: "background-image", "background-position", "background-repeat" and "background-size".

Allowed values for background-image should be:

  • URL
  • conic-gradient
  • linear-gradient
  • radial-gradient
  • repeating-conic-gradient
  • repeating-linear-gradient
  • repeating-radial-gradient
    -none

Describe alternatives you've considered

Additional context
https://www.w3schools.com/cssref/pr_background-image.php

[Bug]: <Custom Component problem>

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Good morning everyone, I would like to report that since yesterday afternoon, there has been a problem with (Custom Component) . Does anyone know, why this problem occurred and if there is a solution.

Screenshot_20230524_100207

Expected Behavior

Implement the description in the following documentation on the custom component
https://github.com/lowcoder-org/lowcoder/blob/main/docs/build-apps/component-guides/custom-component.md

Steps to reproduce

In the app editor, drag and drop custom components onto the canvas.

Environment

No response

Additional Information

No response

Website - Solution Marketplace

We need to offer the ability to showcase good solutions.

  • For integration in other systems
  • For Design / coding related solutions
  • For application screens

Users should have the possibility to publish their solutions like in a CMS.

[Bug]: Calendar translation

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Screenshot 2023-06-08 alle 23 01 30

Expected Behavior

Please correct translation!

Steps to reproduce

On mobile device

Environment

No response

Additional Information

No response

[Feat]: Sortable Event Handlers

Is your feature request related to a problem? Please describe.
Currently the order of Event Handlers for a Component cannot be changed by the user.
This forces users of Lowcoder to plan the order of Event handlers.
To work with debounce is possible - but not optimal.

Describe the solution you'd like
Lowcoder should make the Event handlers sortable like for example the columns in Data Tables

Describe alternatives you've considered
Users can currently use "Debounce" and give the order of execution of event handlers a timing.

Additional context
Add any other context or screenshots about the feature request here.

[Feat]: Insert an optional transformer for query outputs

Is your feature request related to a problem? Please describe.
I'm using Graphql for my queries. The response format looks like this: {data: product: {id: 1}}}.
When I need to use this data I need to write queryProducts.data.data.product.id.
I could solve this by using a transformProducts transformfer that returns the nested data but that's annoying.

Describe the solution you'd like
In Retool I can attach a transformer right before the query output inside the query editor and I really like this solution as it is a regular need to add or change data of a query and it leaves the query list manageable.

Describe alternatives you've considered

  • Adding a transformer for each query
  • Somehow using a transformer language for Json like JSONata

[FEAT]: Updating OpenAPI.json

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

In the data sources, if you are using Open API, the openapi.json file is read once and never read again.
If you made change in the API, you have to recreate a data source to reload the openapi.json file (and therefore redo all your queries).
This is more of an oversight than a bug, but it is difficult to exploit in its current state.

Expected Behavior

I'd like to be able to update the lowcoder side (manually or automatically) when changes occur on the API side.

Steps to reproduce

nothing in particular, it's just the way things work at the moment

Environment

Version: 1.1.8-4ca198b

Additional Information

No response

[Bug]: Number Input inside a list view doesn't hold all values

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

When I'm placing a number input inside a list view, numerInput.value only returns the value of the first row.
Bildschirmfoto 2023-06-18 um 08 14 47

Expected Behavior

numberInput.valueshould return an array of values like [0,2,0]

Steps to reproduce

Put a list view inside an app. Put a number input inside the list view. Inspect the component output.

Environment

No response

Additional Information

No response

[Feat]: Query execution control

Is your feature request related to a problem? Please describe.
Many times on auto-executed queries (like on page load or when data changes) errors are generated becouse the query doesn't have sufficient data to run. This is the case when you load the page or set some fields to null. In that cases an error is generated. A solution could be control the queries execution by JS code inside Lowcoder but most of the time, that is exactly why we came here (to save time writing code).

Describe the solution you'd like
A box that sets what conditions need to be met for the query to execute.

Describe alternatives you've considered
Writing the conditions in a JS query before every other query.

Additional context
Add any other context or screenshots about the feature request here.

[Bug]: I can't select with condition "IN" in MSSQL

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

when I make the selection, it does not display the data. When I take the string in management studio work this query
SELECT * FROM Users WHERE Id in ('8E965D1A-8EB8-43CA-B2C6-5E81946B4BC8', '14CC7614-FFFC-4DC0-9669-57E84BCBC522', 'CB32D41B-3FCC-4DD6-B546-B2477AC001C3', 'A5DCFAFD-3C 69-4CD8 -9840-E4C3D86D03F1', '8E3D5C2D-F5EB-4C54-88CE-64C98EBBB6D2', '4C7AF14B-83E5-4B72-B5C4-0C50743F6AF8', '3F534757-713E-4907-B09B-345D0 B4ED8DA');

image

Expected Behavior

7 rows from the table should be displayed

Steps to reproduce

  1. Add SQL Server
  2. Write Query SELECT col1 FROM Users WHERE Id in ('8E965D1A', 'A5DCFAFD')
  3. and run

Environment

No response

Additional Information

No response

[Feat]: In the table control can we add facility to show table navigation toolbar at both top and bottom instead of what is provides currently (top, bottom, none)?

Is your feature request related to a problem? Please describe.
When working with table showing multiple rows it takes time to scroll from top to bottom or from bottom to top to reach table navigation buttons to navigate to another page.

Describe the solution you'd like
In the table control can we add facility to show table navigation toolbar at both top and bottom instead of what is provides currently (top, bottom, none)?

Rebrand Openblocks to Lowcoder

Rebranding Openblocks to Lowcoder

As part of the project transfer, we need to replace all Openblocks references to Lowcoder equivalent.

Checklist

  • Java API renamed
  • Java tests OK
  • Java build OK
  • Javascript Client renamed
  • Javascript Client tests OK
  • Javascript Client build OK
  • Javascript Client pushed to NPM
  • Nodejs Server renamed
  • Nodejs Server tests OK
  • Nodejs Server build OK
  • Docker renamed
  • Docker build OK
  • Docker pushed to Docker Hub
  • Documentation updated from Openblocks to Lowcoder
  • Documentation removed references to EE

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.